diff options
author | Kris Satya <kris.satya@mongodb.com> | 2021-07-15 17:10:35 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2021-07-19 21:47:38 +0000 |
commit | a16078a291010137916a3c496bc5e423fe55e0e6 (patch) | |
tree | 1668d2883462bb22ebbe782b91e3afc4a7c920a8 /jstests | |
parent | 2bb9844342e8c4c3201cdcbb8e84cc0618505ea0 (diff) | |
download | mongo-a16078a291010137916a3c496bc5e423fe55e0e6.tar.gz |
SERVER-58492 Add support for time-series metaField-only deletes with let
Diffstat (limited to 'jstests')
-rw-r--r-- | jstests/core/timeseries/timeseries_delete.js | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/jstests/core/timeseries/timeseries_delete.js b/jstests/core/timeseries/timeseries_delete.js index ded464d6928..26eb4445fa4 100644 --- a/jstests/core/timeseries/timeseries_delete.js +++ b/jstests/core/timeseries/timeseries_delete.js @@ -30,7 +30,7 @@ TimeseriesTest.run((insert) => { expectedRemainingDocs, expectedNRemoved, deleteQuery, - {expectedErrorCode = null, ordered = true, includeMetaField = true} = {}) { + {expectedErrorCode = null, ordered = true, includeMetaField = true, letDoc = null} = {}) { assert.commandWorked(testDB.createCollection(coll.getName(), { timeseries: { timeField: timeFieldName, @@ -43,10 +43,11 @@ TimeseriesTest.run((insert) => { }); const res = expectedErrorCode ? assert.commandFailedWithCode( - testDB.runCommand({delete: coll.getName(), deletes: deleteQuery, ordered}), + testDB.runCommand( + {delete: coll.getName(), deletes: deleteQuery, ordered, let : letDoc}), expectedErrorCode) - : assert.commandWorked( - testDB.runCommand({delete: coll.getName(), deletes: deleteQuery, ordered})); + : assert.commandWorked(testDB.runCommand( + {delete: coll.getName(), deletes: deleteQuery, ordered, let : letDoc})); const docs = coll.find({}, {_id: 0}).toArray(); assert.eq(res["n"], expectedNRemoved); assert.docEq(docs, expectedRemainingDocs); @@ -175,6 +176,51 @@ TimeseriesTest.run((insert) => { collation: {locale: "de@collation=phonebook"} }]); + // Query on the metaField using let. + testDelete( + [nestedObjA, nestedObjB, nestedObjC], + [nestedObjA, nestedObjC], + 1, + [{q: {"$expr": {"$eq": ["$" + metaFieldName + ".b.a", "$$targetFieldValue"]}}, limit: 0}], + {letDoc: {targetFieldValue: "A"}}); + + const nestedObjD = { + [timeFieldName]: ISODate(), + "measurement": {"A": "cpu"}, + [metaFieldName]: {d: metaFieldName} + }; + + // Query on the metaField using let and the metaField as a variable. + testDelete( + [nestedObjA, nestedObjB, nestedObjC, nestedObjD], + [nestedObjA, nestedObjB, nestedObjD], + 1, + [{q: {"$expr": {"$eq": ["$" + metaFieldName + ".d", "$$" + metaFieldName]}}, limit: 0}], + {letDoc: {[metaFieldName]: "D"}}); + + // Query on the metaField for documents with the metaField as a field value. + testDelete([nestedObjA, nestedObjB, nestedObjC, nestedObjD], + [nestedObjA, nestedObjB, nestedObjC], + 1, + [{q: {"$expr": {"$eq": ["$" + metaFieldName + ".d", metaFieldName]}}, limit: 0}]); + + const dollarObjA = { + [timeFieldName]: ISODate(), + "measurement": {"A": "cpu"}, + [metaFieldName]: {b: "$" + metaFieldName} + }; + + // Query on the metaField for documents with "$" + the metaField as a field value. + testDelete([dollarObjA], [], 1, [{q: {[metaFieldName]: {b: "$" + metaFieldName}}, limit: 0}]); + + // Query on the metaField for documents with "$" + the metaField as a field value using + // $literal. + testDelete( + [dollarObjA], [], 1, [{ + q: {"$expr": {"$eq": ["$" + metaFieldName + ".b", {"$literal": "$" + metaFieldName}]}}, + limit: 0 + }]); + /******************* Tests deleting from a collection without a metaField ********************/ // Remove all documents. testDelete([{[timeFieldName]: ISODate(), "meta": "A"}], [], 1, [{q: {}, limit: 0}], { |