diff options
Diffstat (limited to 'jstests/aggregation/sources/addFields/use_cases.js')
-rw-r--r-- | jstests/aggregation/sources/addFields/use_cases.js | 78 |
1 files changed, 29 insertions, 49 deletions
diff --git a/jstests/aggregation/sources/addFields/use_cases.js b/jstests/aggregation/sources/addFields/use_cases.js index 34703a75907..4df220e95ca 100644 --- a/jstests/aggregation/sources/addFields/use_cases.js +++ b/jstests/aggregation/sources/addFields/use_cases.js @@ -2,10 +2,6 @@ * $addFields can be used to add fixed and computed fields to documents while preserving the * original document. Verify that using $addFields and adding computed fields in a $project yield * the same result. - * @tags: [ - * requires_sharding, - * requires_spawning_own_processes, - * ] */ (function() { @@ -14,54 +10,38 @@ // For arrayEq. load("jstests/aggregation/extras/utils.js"); -const dbName = "test"; const collName = jsTest.name(); +const coll = db.getCollection(collName); +coll.drop(); -function doExecutionTest(conn) { - const coll = conn.getDB(dbName).getCollection(collName); - coll.drop(); - - // Insert a bunch of documents of the form above. - const nDocs = 10; - for (let i = 0; i < nDocs; i++) { - assert.commandWorked(coll.insert({"_id": i, "2i": i * 2, "3i": i * 3})); - } - - // Add the minimum, maximum, and average temperatures, and make sure that doing the same - // with addFields yields the correct answer. - // First compute with $project, since we know all the fields in this document. - let projectPipe = [{ - $project: { - "2i": 1, - "3i": 1, - "6i^2": {"$multiply": ["$2i", "$3i"]}, - // _id is implicitly included. - } - }]; - let correct = coll.aggregate(projectPipe).toArray(); - - // Then compute the same results using $addFields. - let addFieldsPipe = [{ - $addFields: { - "6i^2": {"$multiply": ["$2i", "$3i"]}, - // All other fields are implicitly included. - } - }]; - let addFieldsResult = coll.aggregate(addFieldsPipe).toArray(); - - // Then assert they are the same. - assert(arrayEq(addFieldsResult, correct), - "$addFields does not work the same as a $project with computed and included fields"); +const nDocs = 10; +for (let i = 0; i < nDocs; i++) { + assert.commandWorked(coll.insert({"_id": i, "2i": i * 2, "3i": i * 3})); } -// Test against the standalone started by resmoke.py. -let conn = db.getMongo(); -doExecutionTest(conn); -print("Success! Standalone execution use case test for $addFields passed."); +// Add the minimum, maximum, and average temperatures, and make sure that doing the same +// with addFields yields the correct answer. +// First compute with $project, since we know all the fields in this document. +let projectPipe = [{ + $project: { + "2i": 1, + "3i": 1, + "6i^2": {"$multiply": ["$2i", "$3i"]}, + // _id is implicitly included. + } +}]; +let correct = coll.aggregate(projectPipe).toArray(); + +// Then compute the same results using $addFields. +let addFieldsPipe = [{ + $addFields: { + "6i^2": {"$multiply": ["$2i", "$3i"]}, + // All other fields are implicitly included. + } +}]; +let addFieldsResult = coll.aggregate(addFieldsPipe).toArray(); -// Test against a sharded cluster. -let st = new ShardingTest({shards: 2}); -doExecutionTest(st.s0); -st.stop(); -print("Success! Sharding use case test for $addFields passed."); +// Then assert they are the same. +assert(arrayEq(addFieldsResult, correct), + "$addFields does not work the same as a $project with computed and included fields"); }()); |