summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorKris Satya <kris.satya@mongodb.com>2021-07-15 17:10:35 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2021-07-19 21:47:38 +0000
commita16078a291010137916a3c496bc5e423fe55e0e6 (patch)
tree1668d2883462bb22ebbe782b91e3afc4a7c920a8 /jstests
parent2bb9844342e8c4c3201cdcbb8e84cc0618505ea0 (diff)
downloadmongo-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.js54
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}], {