mongodb-use-objectid
Replace string ids with objectId. Works for single string ids, simple document objects and deep document objects containing arrays as well
Specification / Usage
const test = require('tape');const useObjectId = require('../lib/mongodb-use-objectid'); test('handles undefined value', t => { const result = useObjectId(undefined); t.equal(result, undefined); t.end();}); test('handles simple string id', t => { const result = useObjectId('55af3dabd69361923fc86801'); t.equal(result.id.length, 12); t.end();}); test('handles simple object with _id field', t => { const document = {_id: '55af3dabd69361923fc86802'}; const result = useObjectId(document); t.equal(result._id.id.length, 12); t.end();}); test('handles simple object with given field', t => { const document = {type: '55af3dabd69361923fc86803'}; const result = useObjectId(document, ['type']); t.equal(result.type.id.length, 12); t.end();}); test('handles simple object with multiple given fields', t => { const document = { _id: '55af3dabd69361923fc86804', type: '55af3dabd69361923fc86805' }; const result = useObjectId(document, ['_id', 'type']); t.equal(result._id.id.length, 12); t.equal(result.type.id.length, 12); t.end();}); test('handles deep object with multiple given fields', t => { const document = { _id: '55af3dabd69361923fc86804', base: { type: '55af3dabd69361923fc86805' } }; const result = useObjectId(document, ['_id', 'base.type']); t.equal(result._id.id.length, 12); t.equal(result.base.type.id.length, 12); t.end();}); test('handles deep object with multiple given fields and arrays', t => { const document = { _id: '55af3dabd69361923fc86804', types: [{ baseone: { _id: '55af3dabd69361923fc86805' } }, { basetwo: { subtypes: [{ base: { _id: '55af3dabd69361923fc86805' } }] } }] }; const result = useObjectId(document, ['_id', 'types.baseone._id', 'types.basetwo.subtypes.base._id']); t.equal(result._id.id.length, 12); t.equal(result.types[0].baseone._id.id.length, 12); t.equal(result.types[1].basetwo.subtypes[0].base._id.id.length, 12); t.end();}); test('should leave other properties as is', t => { const document = { _id: '55af3dabd69361923fc86804', name: 'TestName', base: { description: 'TestDescription', type: '55af3dabd69361923fc86805' }, spec: { size: 5, items: [ {name: 'item1'} ] } }; const result = useObjectId(document, ['_id', 'base.type']); t.equal(result.name, 'TestName'); t.equal(result.base.description, 'TestDescription'); t.equal(result.spec.size, 5); t.equal(result.spec.items[0].name, 'item1'); t.end();});