-
Type: Task
-
Resolution: Fixed
-
Priority: Major - P3
-
Affects Version/s: 5.0.0-rc6
-
Component/s: None
-
Fully Compatible
-
QE 2021-08-23, QE 2021-09-06
-
28
Here are the steps to reproduce the issue:
> db.fuzzer_coll.drop(); true > const documentList = [ ... {_id: 0, "str": "Soap", "num": NumberInt(26549), "array": [{_id: 3, "str": NaN, "num": NumberLong("43418") }], }, // 0 ... {_id: 729, "str": "pricing structure", "num": NumberLong("360"), "obj": {_id: 733, "num": NaN, "obj": {}, }, }, // 129 ... ]; > db.fuzzer_coll.insert(documentList); BulkWriteResult({ "writeErrors" : [ ], "writeConcernErrors" : [ ], "nInserted" : 2, "nUpserted" : 0, "nMatched" : 0, "nModified" : 0, "nRemoved" : 0, "upserted" : [ ] }) > // using the classic engine > db.adminCommand({setParameter: 1, internalQueryEnableSlotBasedExecutionEngine: false}) { "was" : false, "ok" : 1 } > db.fuzzer_coll.aggregate([{$sort: {_id: 1}}, {$graphLookup: {from: "fuzzer_coll", startWith: ["$obj.obj.str", NumberDecimal("-NaN")], connectFromField: "obj.obj.obj.obj", connectToField: "obj.num", as: "array", maxDepth: 1, depthField: "obj.obj.obj.num"}}]) { "_id" : 0, "str" : "Soap", "num" : 26549, "array" : [ { "_id" : 0, "str" : "Soap", "num" : 26549, "array" : [ { "_id" : 3, "str" : NaN, "num" : NumberLong(43418) } ], "obj" : { "obj" : { "obj" : { "num" : NumberLong(0) } } } }, { "_id" : 729, "str" : "pricing structure", "num" : NumberLong(360), "obj" : { "_id" : 733, "num" : NaN, "obj" : { "obj" : { "num" : NumberLong(0) } } } } ] } { "_id" : 729, "str" : "pricing structure", "num" : NumberLong(360), "obj" : { "_id" : 733, "num" : NaN, "obj" : { } }, "array" : [ { "_id" : 0, "str" : "Soap", "num" : 26549, "array" : [ { "_id" : 3, "str" : NaN, "num" : NumberLong(43418) } ], "obj" : { "obj" : { "obj" : { "num" : NumberLong(0) } } } }, { "_id" : 729, "str" : "pricing structure", "num" : NumberLong(360), "obj" : { "_id" : 733, "num" : NaN, "obj" : { "obj" : { "num" : NumberLong(0) } } } } ] } > // using SBE > db.adminCommand({setParameter: 1, internalQueryEnableSlotBasedExecutionEngine: true}) { "was" : false, "ok" : 1 } > db.fuzzer_coll.aggregate([{$sort: {_id: 1}}, {$limit: 20}, {$graphLookup: {from: "fuzzer_coll", startWith: ["$obj.obj.str", NumberDecimal("-NaN")], connectFromField: "obj.obj.obj.obj", connectToField: "obj.num", as: "array", maxDepth: 1, depthField: "obj.obj.obj.num"}}]) { "_id" : 0, "str" : "Soap", "num" : 26549, "array" : [ { "_id" : 0, "str" : "Soap", "num" : 26549, "array" : [ { "_id" : 3, "str" : NaN, "num" : NumberLong(43418) } ], "obj" : { "obj" : { "obj" : { "num" : NumberLong(0) } } } } ] } { "_id" : 729, "str" : "pricing structure", "num" : NumberLong(360), "obj" : { "_id" : 733, "num" : NaN, "obj" : { } }, "array" : [ { "_id" : 0, "str" : "Soap", "num" : 26549, "array" : [ { "_id" : 3, "str" : NaN, "num" : NumberLong(43418) } ], "obj" : { "obj" : { "obj" : { "num" : NumberLong(0) } } } } ] }
As you see, the output of SBE has fewer elements compared to the classic engine, which hints into the direction that the special values (e.g., NaN and non-existing fields) accessed from SBE by $graphLookup are treated differently compared to the classic engine.
- depends on
-
SERVER-58268 [SBE] $in match expression fails to match a document when NaN value types differ
- Closed