summaryrefslogtreecommitdiff
path: root/jstests/core
diff options
context:
space:
mode:
authorDrew Paroski <drew.paroski@mongodb.com>2023-04-18 03:26:55 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2023-04-26 03:09:57 +0000
commitb3b06e3d80944b177dbde83e1f30c785764c4e3d (patch)
tree1feb7b078df13226a3659947aca704e3268df689 /jstests/core
parentcd29dad92501a77a4f5d36a63dfbbd66e4299ee9 (diff)
downloadmongo-b3b06e3d80944b177dbde83e1f30c785764c4e3d.tar.gz
SERVER-76510 Make makeBsonObj() preserve field order
Diffstat (limited to 'jstests/core')
-rw-r--r--jstests/core/columnstore/columnstore_index_correctness.js215
-rw-r--r--jstests/core/columnstore/columnstore_large_array_index_correctness.js28
2 files changed, 122 insertions, 121 deletions
diff --git a/jstests/core/columnstore/columnstore_index_correctness.js b/jstests/core/columnstore/columnstore_index_correctness.js
index 247e7888399..de3ec4ec1ec 100644
--- a/jstests/core/columnstore/columnstore_index_correctness.js
+++ b/jstests/core/columnstore/columnstore_index_correctness.js
@@ -181,102 +181,102 @@ const coll = db.columnstore_index_correctness;
// Multiple tests in this file use the same dataset. Intentionally not using _id as the unique
// identifier, to avoid getting IDHACK plans when we query by it.
const docs = [
- {num: 0},
- {num: 1, a: null},
- {num: 2, a: "scalar"},
- {num: 3, a: {}},
- {num: 4, a: {x: 1, b: "scalar"}},
- {num: 5, a: {b: {}}},
- {num: 6, a: {x: 1, b: {}}},
- {num: 7, a: {x: 1, b: {x: 1}}},
- {num: 8, a: {b: {c: "scalar"}}},
- {num: 9, a: {b: {c: null}}},
- {num: 10, a: {b: {c: [[1, 2], [{}], 2]}}},
- {num: 11, a: {x: 1, b: {x: 1, c: ["scalar"]}}},
- {num: 12, a: {x: 1, b: {c: {x: 1}}}},
- {num: 13, a: {b: []}},
- {num: 14, a: {b: [null]}},
- {num: 15, a: {b: ["scalar"]}},
- {num: 16, a: {b: [[]]}},
- {num: 17, a: {b: [1, {}, 2]}},
- {num: 18, a: {b: [[1, 2], [{}], 2]}},
- {num: 19, a: {x: 1, b: [[1, 2], [{}], 2]}},
- {num: 20, a: {b: [{c: "scalar"}]}},
- {num: 21, a: {b: [{c: "scalar"}, {c: "scalar2"}]}},
- {num: 22, a: {b: [{c: [[1, 2], [{}], 2]}]}},
- {num: 23, a: {b: [1, {c: "scalar"}, 2]}},
- {num: 24, a: {b: [1, {c: [[1, 2], [{}], 2]}, 2]}},
- {num: 25, a: {x: 1, b: [1, {c: [[1, 2], [{}], 2]}, 2]}},
- {num: 26, a: {b: [[1, 2], [{c: "scalar"}], 2]}},
- {num: 27, a: {b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}},
- {num: 28, a: {x: 1, b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}},
- {num: 29, a: []},
- {num: 30, a: [null]},
- {num: 31, a: ["scalar"]},
- {num: 32, a: [[]]},
- {num: 33, a: [{}]},
- {num: 34, a: [1, {}, 2]},
- {num: 35, a: [[1, 2], [{}], 2]},
- {num: 36, a: [{b: "scalar"}]},
- {num: 37, a: [{b: null}]},
- {num: 38, a: [1, {b: "scalar"}, 2]},
- {num: 39, a: [1, {b: []}, 2]},
- {num: 40, a: [1, {b: [null]}, 2]},
- {num: 41, a: [1, {b: ["scalar"]}, 2]},
- {num: 42, a: [1, {b: [[]]}, 2]},
- {num: 43, a: [{b: []}]},
- {num: 44, a: [{b: ["scalar"]}]},
- {num: 45, a: [{b: [[]]}]},
- {num: 46, a: [{b: {}}]},
- {num: 47, a: [{b: {c: "scalar"}}]},
- {num: 48, a: [{b: {c: [[1, 2], [{}], 2]}}]},
- {num: 49, a: [{b: {x: 1}}]},
- {num: 50, a: [{b: {x: 1, c: "scalar"}}]},
- {num: 51, a: [{b: [{c: "scalar"}]}]},
- {num: 52, a: [{b: [{c: ["scalar"]}]}]},
- {num: 53, a: [{b: [1, {c: ["scalar"]}, 2]}]},
- {num: 54, a: [{b: [{}]}]},
- {num: 55, a: [{b: [[1, 2], [{}], 2]}]},
- {num: 56, a: [{b: [[1, 2], [{c: "scalar"}], 2]}]},
- {num: 57, a: [{b: [[1, 2], [{c: ["scalar"]}], 2]}]},
- {num: 58, a: [1, {b: {}}, 2]},
- {num: 59, a: [1, {b: {c: "scalar"}}, 2]},
- {num: 60, a: [1, {b: {c: {x: 1}}}, 2]},
- {num: 61, a: [1, {b: {c: [1, {}, 2]}}, 2]},
- {num: 62, a: [1, {b: {x: 1}}, 2]},
- {num: 63, a: [1, {b: {x: 1, c: "scalar"}}, 2]},
- {num: 64, a: [1, {b: {x: 1, c: [[]]}}, 2]},
- {num: 65, a: [1, {b: {x: 1, c: [1, {}, 2]}}, 2]},
- {num: 66, a: [1, {b: [{}]}, 2]},
- {num: 67, a: [1, {b: [{c: "scalar"}]}, 2]},
- {num: 68, a: [1, {b: [{c: {x: 1}}]}, 2]},
- {num: 69, a: [1, {b: [{c: [1, {}, 2]}]}, 2]},
- {num: 70, a: [1, {b: [1, {}, 2]}, 2]},
- {num: 71, a: [1, {b: [1, {c: null}, 2]}, 2]},
- {num: 72, a: [1, {b: [1, {c: "scalar"}, 2]}, 2]},
- {num: 73, a: [1, {b: [1, {c: [1, {}, 2]}, 2]}, 2]},
- {num: 74, a: [1, {b: [[1, 2], [{}], 2]}, 2]},
- {num: 75, a: [1, {b: [[1, 2], [{c: "scalar"}], 2]}, 2]},
- {num: 76, a: [1, {b: [[1, 2], [{c: [1, {}, 2]}], 2]}, 2]},
- {num: 77, a: [[1, 2], [{b: "scalar"}], 2]},
- {num: 78, a: [[1, 2], [{b: {x: 1, c: "scalar"}}], 2]},
- {num: 79, a: [[1, 2], [{b: {x: 1, c: [1, {}, 2]}}], 2]},
- {num: 80, a: [[1, 2], [{b: []}], 2]},
- {num: 81, a: [[1, 2], [{b: [1, {c: "scalar"}, 2]}], 2]},
- {num: 82, a: [[1, 2], [{b: [[1, 2], [{c: "scalar"}], 2]}], 2]},
- {num: 83, a: [[1, 2], [{b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}], 2]},
- {num: 84, a: [{b: [{c: 1}, {}]}]},
- {num: 85, a: [{b: [{c: 1}, {d: 1}]}]},
- {num: 86, a: [{b: {c: 1}}, {b: {}}]},
- {num: 87, a: [{b: {c: 1}}, {b: {d: 1}}]},
- {num: 88, a: [{b: {c: 1}}, {}]},
- {num: 89, a: [{b: {c: 1}}, {b: null}]},
- {num: 90, a: [{b: {c: 1}}, {b: []}]},
- {num: 91, a: [{b: []}, {b: []}]},
- {num: 92, a: {b: [{c: [1, 2]}]}},
- {num: 93, a: {b: {c: [1, 2]}}},
- {num: 94, a: [[1, 2], [{b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}], 2]},
- {num: 95, a: [{m: 1, n: 2}, {m: 2, o: 1}]},
+ {_num: 0},
+ {_num: 1, a: null},
+ {_num: 2, a: "scalar"},
+ {_num: 3, a: {}},
+ {_num: 4, a: {x: 1, b: "scalar"}},
+ {_num: 5, a: {b: {}}},
+ {_num: 6, a: {x: 1, b: {}}},
+ {_num: 7, a: {x: 1, b: {x: 1}}},
+ {_num: 8, a: {b: {c: "scalar"}}},
+ {_num: 9, a: {b: {c: null}}},
+ {_num: 10, a: {b: {c: [[1, 2], [{}], 2]}}},
+ {_num: 11, a: {x: 1, b: {x: 1, c: ["scalar"]}}},
+ {_num: 12, a: {x: 1, b: {c: {x: 1}}}},
+ {_num: 13, a: {b: []}},
+ {_num: 14, a: {b: [null]}},
+ {_num: 15, a: {b: ["scalar"]}},
+ {_num: 16, a: {b: [[]]}},
+ {_num: 17, a: {b: [1, {}, 2]}},
+ {_num: 18, a: {b: [[1, 2], [{}], 2]}},
+ {_num: 19, a: {x: 1, b: [[1, 2], [{}], 2]}},
+ {_num: 20, a: {b: [{c: "scalar"}]}},
+ {_num: 21, a: {b: [{c: "scalar"}, {c: "scalar2"}]}},
+ {_num: 22, a: {b: [{c: [[1, 2], [{}], 2]}]}},
+ {_num: 23, a: {b: [1, {c: "scalar"}, 2]}},
+ {_num: 24, a: {b: [1, {c: [[1, 2], [{}], 2]}, 2]}},
+ {_num: 25, a: {x: 1, b: [1, {c: [[1, 2], [{}], 2]}, 2]}},
+ {_num: 26, a: {b: [[1, 2], [{c: "scalar"}], 2]}},
+ {_num: 27, a: {b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}},
+ {_num: 28, a: {x: 1, b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}},
+ {_num: 29, a: []},
+ {_num: 30, a: [null]},
+ {_num: 31, a: ["scalar"]},
+ {_num: 32, a: [[]]},
+ {_num: 33, a: [{}]},
+ {_num: 34, a: [1, {}, 2]},
+ {_num: 35, a: [[1, 2], [{}], 2]},
+ {_num: 36, a: [{b: "scalar"}]},
+ {_num: 37, a: [{b: null}]},
+ {_num: 38, a: [1, {b: "scalar"}, 2]},
+ {_num: 39, a: [1, {b: []}, 2]},
+ {_num: 40, a: [1, {b: [null]}, 2]},
+ {_num: 41, a: [1, {b: ["scalar"]}, 2]},
+ {_num: 42, a: [1, {b: [[]]}, 2]},
+ {_num: 43, a: [{b: []}]},
+ {_num: 44, a: [{b: ["scalar"]}]},
+ {_num: 45, a: [{b: [[]]}]},
+ {_num: 46, a: [{b: {}}]},
+ {_num: 47, a: [{b: {c: "scalar"}}]},
+ {_num: 48, a: [{b: {c: [[1, 2], [{}], 2]}}]},
+ {_num: 49, a: [{b: {x: 1}}]},
+ {_num: 50, a: [{b: {x: 1, c: "scalar"}}]},
+ {_num: 51, a: [{b: [{c: "scalar"}]}]},
+ {_num: 52, a: [{b: [{c: ["scalar"]}]}]},
+ {_num: 53, a: [{b: [1, {c: ["scalar"]}, 2]}]},
+ {_num: 54, a: [{b: [{}]}]},
+ {_num: 55, a: [{b: [[1, 2], [{}], 2]}]},
+ {_num: 56, a: [{b: [[1, 2], [{c: "scalar"}], 2]}]},
+ {_num: 57, a: [{b: [[1, 2], [{c: ["scalar"]}], 2]}]},
+ {_num: 58, a: [1, {b: {}}, 2]},
+ {_num: 59, a: [1, {b: {c: "scalar"}}, 2]},
+ {_num: 60, a: [1, {b: {c: {x: 1}}}, 2]},
+ {_num: 61, a: [1, {b: {c: [1, {}, 2]}}, 2]},
+ {_num: 62, a: [1, {b: {x: 1}}, 2]},
+ {_num: 63, a: [1, {b: {x: 1, c: "scalar"}}, 2]},
+ {_num: 64, a: [1, {b: {x: 1, c: [[]]}}, 2]},
+ {_num: 65, a: [1, {b: {x: 1, c: [1, {}, 2]}}, 2]},
+ {_num: 66, a: [1, {b: [{}]}, 2]},
+ {_num: 67, a: [1, {b: [{c: "scalar"}]}, 2]},
+ {_num: 68, a: [1, {b: [{c: {x: 1}}]}, 2]},
+ {_num: 69, a: [1, {b: [{c: [1, {}, 2]}]}, 2]},
+ {_num: 70, a: [1, {b: [1, {}, 2]}, 2]},
+ {_num: 71, a: [1, {b: [1, {c: null}, 2]}, 2]},
+ {_num: 72, a: [1, {b: [1, {c: "scalar"}, 2]}, 2]},
+ {_num: 73, a: [1, {b: [1, {c: [1, {}, 2]}, 2]}, 2]},
+ {_num: 74, a: [1, {b: [[1, 2], [{}], 2]}, 2]},
+ {_num: 75, a: [1, {b: [[1, 2], [{c: "scalar"}], 2]}, 2]},
+ {_num: 76, a: [1, {b: [[1, 2], [{c: [1, {}, 2]}], 2]}, 2]},
+ {_num: 77, a: [[1, 2], [{b: "scalar"}], 2]},
+ {_num: 78, a: [[1, 2], [{b: {x: 1, c: "scalar"}}], 2]},
+ {_num: 79, a: [[1, 2], [{b: {x: 1, c: [1, {}, 2]}}], 2]},
+ {_num: 80, a: [[1, 2], [{b: []}], 2]},
+ {_num: 81, a: [[1, 2], [{b: [1, {c: "scalar"}, 2]}], 2]},
+ {_num: 82, a: [[1, 2], [{b: [[1, 2], [{c: "scalar"}], 2]}], 2]},
+ {_num: 83, a: [[1, 2], [{b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}], 2]},
+ {_num: 84, a: [{b: [{c: 1}, {}]}]},
+ {_num: 85, a: [{b: [{c: 1}, {d: 1}]}]},
+ {_num: 86, a: [{b: {c: 1}}, {b: {}}]},
+ {_num: 87, a: [{b: {c: 1}}, {b: {d: 1}}]},
+ {_num: 88, a: [{b: {c: 1}}, {}]},
+ {_num: 89, a: [{b: {c: 1}}, {b: null}]},
+ {_num: 90, a: [{b: {c: 1}}, {b: []}]},
+ {_num: 91, a: [{b: []}, {b: []}]},
+ {_num: 92, a: {b: [{c: [1, 2]}]}},
+ {_num: 93, a: {b: {c: [1, 2]}}},
+ {_num: 94, a: [[1, 2], [{b: [[1, 2], [{c: [[1, 2], [{}], 2]}], 2]}], 2]},
+ {_num: 95, a: [{m: 1, n: 2}, {m: 2, o: 1}]},
];
coll.drop();
@@ -284,7 +284,7 @@ let bulk = coll.initializeUnorderedBulkOp();
for (let doc of docs) {
let insertObj = {};
Object.assign(insertObj, doc);
- if (doc.num % 2 == 0) {
+ if (doc._num % 2 == 0) {
insertObj.optionalField = "foo";
}
bulk.insert(insertObj);
@@ -294,7 +294,7 @@ bulk.execute();
assert.commandWorked(coll.createIndex({"$**": "columnstore"}));
(function testProjectionOfIndependentPaths() {
- const kProjection = {_id: 0, "a.b.c": 1, num: 1, optionalField: 1};
+ const kProjection = {_id: 0, _num: 1, "a.b.c": 1, optionalField: 1};
let explain = coll.find({}, kProjection).explain();
assert(planHasStage(db, explain, "COLUMN_SCAN"),
@@ -304,15 +304,16 @@ assert.commandWorked(coll.createIndex({"$**": "columnstore"}));
assert.eq(results.length, docs.length, "With no filter should have returned all docs");
for (let res of results) {
- const trueResult = coll.find({num: res.num}, kProjection).hint({$natural: 1}).toArray()[0];
- const originalDoc = coll.findOne({num: res.num});
+ const trueResult =
+ coll.find({_num: res._num}, kProjection).hint({$natural: 1}).toArray()[0];
+ const originalDoc = coll.findOne({_num: res._num});
assert.docEq(res, trueResult, "Mismatched projection of " + tojson(originalDoc));
}
})();
// Run a similar query that projects multiple fields with a shared parent object.
(function testProjectionOfSiblingPaths() {
- const kSiblingProjection = {_id: 0, "a.m": 1, "a.n": 1, num: 1};
+ const kSiblingProjection = {_id: 0, _num: 1, "a.m": 1, "a.n": 1};
let explain = coll.find({}, kSiblingProjection).explain();
assert(planHasStage(db, explain, "COLUMN_SCAN"),
@@ -323,15 +324,15 @@ assert.commandWorked(coll.createIndex({"$**": "columnstore"}));
for (let res of results) {
const trueResult =
- coll.find({num: res.num}, kSiblingProjection).hint({$natural: 1}).toArray()[0];
- const originalDoc = coll.findOne({num: res.num});
+ coll.find({_num: res._num}, kSiblingProjection).hint({$natural: 1}).toArray()[0];
+ const originalDoc = coll.findOne({_num: res._num});
assert.eq(res, trueResult, "Mismatched projection of " + tojson(originalDoc));
}
})();
// Run a query that tests the SERVER-67742 fix.
(function testPrefixPath() {
- const kPrefixProjection = {_id: 0, "a": 1, num: 1};
+ const kPrefixProjection = {_id: 0, _num: 1, "a": 1};
// Have to use the index hint because SERVER-67264 blocks selection of CSI.
let explain = coll.find({"a.m": 1}, kPrefixProjection).hint({"$**": "columnstore"}).explain();
@@ -347,8 +348,8 @@ assert.commandWorked(coll.createIndex({"$**": "columnstore"}));
for (let res of results) {
const trueResult =
- coll.find({num: res.num}, kPrefixProjection).hint({$natural: 1}).toArray()[0];
- const originalDoc = coll.findOne({num: res.num});
+ coll.find({_num: res._num}, kPrefixProjection).hint({$natural: 1}).toArray()[0];
+ const originalDoc = coll.findOne({_num: res._num});
assert.eq(res, trueResult, "Mismatched projection of " + tojson(originalDoc));
}
})();
@@ -358,7 +359,7 @@ assert.commandWorked(coll.createIndex({"$**": "columnstore"}));
(function testGroup() {
// Sanity check that we are comparing the plans we expect to be.
let pipeline = [
- {$group: {_id: "$a.b.c", docs: {$push: "$num"}}},
+ {$group: {_id: "$a.b.c", docs: {$push: "$_num"}}},
{$set: {docs: {$sortArray: {input: "$docs", sortBy: 1}}}}
];
let naturalExplain = coll.explain().aggregate(pipeline, {hint: {$natural: 1}});
diff --git a/jstests/core/columnstore/columnstore_large_array_index_correctness.js b/jstests/core/columnstore/columnstore_large_array_index_correctness.js
index 3c15b62e247..dbedb3ce597 100644
--- a/jstests/core/columnstore/columnstore_large_array_index_correctness.js
+++ b/jstests/core/columnstore/columnstore_large_array_index_correctness.js
@@ -26,16 +26,16 @@ const coll = db.columnstore_large_array_index_correctness;
coll.drop();
const uint8 = {
- num: 0,
- a: Array.from({length: 50}, (_, i) => ({b: [2 * i, 2 * i + 1]}))
+ _num: 0,
+ o: Array.from({length: 50}, (_, i) => ({b: [2 * i, 2 * i + 1]})),
};
const uint16 = {
- num: 1,
- a: Array.from({length: 150}, (_, i) => ({b: [2 * i, 2 * i + 1]}))
+ _num: 1,
+ o: Array.from({length: 150}, (_, i) => ({b: [2 * i, 2 * i + 1]})),
};
const uint32 = {
- num: 2,
- a: Array.from({length: 15000}, (_, i) => ({b: [2 * i, 2 * i + 1]}))
+ _num: 2,
+ o: Array.from({length: 15000}, (_, i) => ({b: [2 * i, 2 * i + 1]})),
};
const docs = [uint8, uint16, uint32];
@@ -47,27 +47,27 @@ for (let doc of docs) {
assert.commandWorked(coll.createIndex({"$**": "columnstore"}));
const kProjection = {
_id: 0,
- "a.b": 1,
- num: 1,
+ _num: 1,
+ "o.b": 1,
};
// Ensure this test is exercising the column scan.
-let explain = coll.find({}, kProjection).sort({num: 1}).explain();
+let explain = coll.find({}, kProjection).sort({_num: 1}).explain();
assert(planHasStage(db, explain, "COLUMN_SCAN"), explain);
// Run a query getting all of the results using the column index.
-let results = coll.find({}, kProjection).sort({num: 1}).toArray();
+let results = coll.find({}, kProjection).sort({_num: 1}).toArray();
assert.gt(results.length, 0);
// Run a query getting all results without column index
-let trueResults = coll.find({}, kProjection).hint({$natural: 1}).sort({num: 1}).toArray();
+let trueResults = coll.find({}, kProjection).hint({$natural: 1}).sort({_num: 1}).toArray();
assert.eq(results.length, trueResults.length);
for (let i = 0; i < results.length; i++) {
- const originalDoc = coll.findOne({num: results[i].num});
+ const originalDoc = coll.findOne({_num: results[i]._num});
assert.eq(results[i], trueResults[i], () =>
- `column store index output number: ${results[i].num}, collection scan output number: ${trueResults[i].num},
- original document number was: ${originalDoc.num}`);
+ `column store index output number: ${results[i]._num}, collection scan output number: ${trueResults[i]._num},
+ original document number was: ${originalDoc._num}`);
}
})();