diff --git a/packages/mongo/oplog_v2_converter.js b/packages/mongo/oplog_v2_converter.js index 658e64ed0a..c7576087c5 100644 --- a/packages/mongo/oplog_v2_converter.js +++ b/packages/mongo/oplog_v2_converter.js @@ -57,7 +57,6 @@ const nestedOplogEntryParsers = ( const setObjectSource = { ...i, ...u }; const $set = Object.keys(setObjectSource).reduce((acc, key) => { const prefixedKey = `${prefixKey}${key}`; - return { ...acc, ...(!Array.isArray(setObjectSource[key]) && typeof setObjectSource[key] === 'object' @@ -97,6 +96,7 @@ function flattenObject(ob) { if (typeof ob[i] == 'object' && ob[i] !== null) { const flatObject = flattenObject(ob[i]); + if(Object.keys(flatObject).length === 0) { return ob; } for (const x in flatObject) { if (!flatObject.hasOwnProperty(x)) continue; diff --git a/packages/mongo/oplog_v2_converter_tests.js b/packages/mongo/oplog_v2_converter_tests.js index 6c8e73063f..602e82cb6f 100644 --- a/packages/mongo/oplog_v2_converter_tests.js +++ b/packages/mongo/oplog_v2_converter_tests.js @@ -50,6 +50,16 @@ Tinytest.add('oplog - v2/v1 conversion', function(test) { JSON.stringify({ $v: 2, $set: { 'a.b': 2 } }) ); + //set a new nested field inside an object + const entry51 = { "$v" : 2, "diff" : { "u" : { "count" : 1 }, "i" : { "nested" : { "state" : { } } } } }; + // the correct format for this test, inspecting the mongodb oplog, should be "nested" : { "state" : { } } } + // but this is a case in which we can flatten the object without collateral, so we are considering + // "nested.state" : { } to be valid too + test.equal( + JSON.stringify(oplogV2V1Converter(entry51)), + JSON.stringify( { "$v" : 2, "$set" : { "nested.state": { }, "count" : 1 } }) + ); + //set an existing nested field inside an object const entry6 = { $v: 2,