summaryrefslogtreecommitdiff
path: root/jstests/aggregation/documents_merge.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/aggregation/documents_merge.js')
-rw-r--r--jstests/aggregation/documents_merge.js113
1 files changed, 0 insertions, 113 deletions
diff --git a/jstests/aggregation/documents_merge.js b/jstests/aggregation/documents_merge.js
deleted file mode 100644
index 99e9a8f1a41..00000000000
--- a/jstests/aggregation/documents_merge.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/**
- * This is the test for $documents stage along with $merge stage in an aggregation pipeline,
- * including verifying the bug in SERVER-85892 is addressed when the spec 'whenMatched' is not
- * empty.
- *
- * @tags: [
- * requires_fcv_80,
- * assumes_against_mongod_not_mongos, # not yet supported until 7.2 with SERVER-65534
- * ]
- */
-
-load("jstests/aggregation/extras/merge_helpers.js"); // For withEachMergeMode and
- // dropWithoutImplicitRecreate.
-
-const outColl = db[`${jsTest.name()}_out`];
-const outCollName = outColl.getName();
-const expectedTotalDocs = 100;
-
-function assertDocsInsertedCorrectly(docs, pipeline) {
- const msg = `Failed with pipeline: ${JSON.stringify(pipeline, null, 2)}`;
-
- assert.eq(expectedTotalDocs, docs.length, msg);
- for (let i = 0; i < expectedTotalDocs; i++) {
- assert.eq(docs[i].x, i, msg);
- }
-}
-
-const documentsStage = {
- $documents: {$map: {input: {$range: [0, expectedTotalDocs]}, in : {x: "$$this"}}}
-};
-
-function testFn(pipeline, assertFn) {
- // Creates an index as $merge requires a unique index with the 'on' identifier field. Then
- // inserts a document allowed to be matched.
- dropWithoutImplicitRecreate(outCollName);
- assert.commandWorked(outColl.createIndex({x: 1}, {unique: true}));
- assert.commandWorked(outColl.insert({x: 10}));
-
- assert.doesNotThrow(() => db.aggregate(pipeline));
- let res = outColl.find({}, {_id: 0}).sort({x: 1}).toArray();
- assertDocsInsertedCorrectly(res, pipeline);
- assertFn(res);
-}
-
-{ // Tests $merge with non-empty pipeline along with let in whenMatched spec.
- const pipeline = [
- documentsStage,
- {
- $merge: {
- into: outCollName,
- let : {num: 123},
- whenMatched: [{$set: {number: "$$num"}}],
- on: "x"
- }
- }
- ];
-
- testFn(pipeline, res => {
- assert.eq(res.filter(elem => elem.number === 123).length, 1);
- });
-}
-
-{ // Tests $merge with non-empty pipeline in whenMatched spec.
- const pipeline = [
- documentsStage,
- {$merge: {into: outCollName, whenMatched: [{$set: {new: true}}], on: "x"}}
- ];
-
- testFn(pipeline, res => {
- assert.eq(res.filter(elem => elem.new === true).length, 1);
- });
-}
-
-// Tests each combination of merge modes.
-withEachMergeMode(({whenMatchedMode, whenNotMatchedMode}) => {
- const expectErrorCode = whenMatchedMode === "fail"
- ? ErrorCodes.DuplicateKey
- : whenNotMatchedMode === "fail" ? ErrorCodes.MergeStageNoMatchingDocument : null;
-
- // Creates an index as $merge requires a unique index with the 'on' identifier field. Then
- // inserts a document allowed to be matched.
- dropWithoutImplicitRecreate(outCollName);
- assert.commandWorked(outColl.createIndex({x: 1}, {unique: true}));
- assert.commandWorked(outColl.insert({x: 10, old: true}));
-
- const pipeline = [
- documentsStage,
- {
- $merge: {
- into: outCollName,
- whenMatched: whenMatchedMode,
- whenNotMatched: whenNotMatchedMode,
- on: "x",
- }
- }
- ];
-
- if (expectErrorCode) {
- assert.throwsWithCode(() => db.aggregate(pipeline), expectErrorCode);
- return;
- }
-
- assert.doesNotThrow(() => db.aggregate(pipeline));
- let res = outColl.find({}, {_id: 0}).sort({x: 1}).toArray();
- if (whenNotMatchedMode == "discard") {
- assert.eq(outColl.count(), 1);
- } else {
- assertDocsInsertedCorrectly(res, pipeline);
- }
-
- // Asserts if the old document is replaced when 'whenMatchedMode' is "replace".
- assert.eq(res.filter(elem => elem.old === true).length, whenMatchedMode == "replace" ? 0 : 1);
-});