diff options
543 files changed, 1232 insertions, 1164 deletions
diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_causal_consistency.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_causal_consistency.yml index 5949fb48075..0f7946d8670 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_causal_consistency.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_causal_consistency.yml @@ -61,7 +61,7 @@ selector: - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_causal_consistency_and_balancer.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_causal_consistency_and_balancer.yml index 40ae7b4ac69..9bb04c112c5 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_causal_consistency_and_balancer.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_causal_consistency_and_balancer.yml @@ -64,7 +64,7 @@ selector: - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_kill_primary_with_balancer.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_kill_primary_with_balancer.yml index faa1dce843e..b6dd60cf5bc 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_kill_primary_with_balancer.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_kill_primary_with_balancer.yml @@ -71,7 +71,7 @@ selector: - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # The WTWriteConflictException failpoint is not supported on mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_local_read_write_multi_stmt_txn.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_local_read_write_multi_stmt_txn.yml index c4044f40d88..f2f0e5dc637 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_local_read_write_multi_stmt_txn.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_local_read_write_multi_stmt_txn.yml @@ -61,7 +61,7 @@ selector: # can cause OOM kills on test hosts - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_local_read_write_multi_stmt_txn_with_balancer.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_local_read_write_multi_stmt_txn_with_balancer.yml index ec96f2431d9..33c364f97dd 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_local_read_write_multi_stmt_txn_with_balancer.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_local_read_write_multi_stmt_txn_with_balancer.yml @@ -61,7 +61,7 @@ selector: # can cause OOM kills on test hosts - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn.yml index eb6a8f754f4..3ba770e70a6 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn.yml @@ -61,7 +61,7 @@ selector: # can cause OOM kills on test hosts - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_kill_primary.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_kill_primary.yml index 8aa0ee3784d..f1a689fa316 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_kill_primary.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_kill_primary.yml @@ -77,7 +77,7 @@ selector: # can cause OOM kills on test hosts - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_terminate_primary.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_terminate_primary.yml index 6c8c02121ae..dd6c821c646 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_terminate_primary.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_terminate_primary.yml @@ -77,7 +77,7 @@ selector: # can cause OOM kills on test hosts - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_with_balancer.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_with_balancer.yml index 294342b192c..874de8baaee 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_with_balancer.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_with_balancer.yml @@ -61,7 +61,7 @@ selector: # can cause OOM kills on test hosts - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_with_stepdowns.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_with_stepdowns.yml index 885f6c865de..d916b3ce65e 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_with_stepdowns.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_multi_stmt_txn_with_stepdowns.yml @@ -66,7 +66,7 @@ selector: # can cause OOM kills on test hosts - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_replication.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_replication.yml index 71bf7634897..a4077faed3f 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_replication.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_replication.yml @@ -60,7 +60,7 @@ selector: - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_replication_with_balancer.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_replication_with_balancer.yml index 8a8c863d129..2a53ce35f21 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_replication_with_balancer.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_replication_with_balancer.yml @@ -62,7 +62,7 @@ selector: - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # reIndex is not supported in mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_terminate_primary_with_balancer.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_terminate_primary_with_balancer.yml index fa6c78b2ee5..76fb5a6f270 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_terminate_primary_with_balancer.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_terminate_primary_with_balancer.yml @@ -71,7 +71,7 @@ selector: - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # The WTWriteConflictException failpoint is not supported on mongos. diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_with_stepdowns.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_with_stepdowns.yml index a65c5d559c1..ce3749db4bd 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_with_stepdowns.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_with_stepdowns.yml @@ -68,7 +68,7 @@ selector: - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # our .remove(query, {justOne: true}) calls lack shard keys diff --git a/buildscripts/resmokeconfig/suites/concurrency_sharded_with_stepdowns_and_balancer.yml b/buildscripts/resmokeconfig/suites/concurrency_sharded_with_stepdowns_and_balancer.yml index 413fa17a469..a839376f964 100644 --- a/buildscripts/resmokeconfig/suites/concurrency_sharded_with_stepdowns_and_balancer.yml +++ b/buildscripts/resmokeconfig/suites/concurrency_sharded_with_stepdowns_and_balancer.yml @@ -71,7 +71,7 @@ selector: - jstests/concurrency/fsm_workloads/findAndModify_update_grow.js - # cannot createIndex after dropDatabase without sharding first + # cannot ensureIndex after dropDatabase without sharding first - jstests/concurrency/fsm_workloads/plan_cache_drop_database.js # our .remove(query, {justOne: true}) calls lack shard keys diff --git a/jstests/aggregation/bugs/server12015.js b/jstests/aggregation/bugs/server12015.js index bae114f2417..2027b6d9ff5 100644 --- a/jstests/aggregation/bugs/server12015.js +++ b/jstests/aggregation/bugs/server12015.js @@ -36,7 +36,7 @@ function assertResultsMatch(pipeline, ignoreSortOrder) { pipeline = [{$match: {a: {$gte: 0}}}].concat(pipeline); // Once with an index. - assert.commandWorked(coll.createIndex(indexSpec)); + assert.commandWorked(coll.ensureIndex(indexSpec)); var resultsWithIndex = coll.aggregate(pipeline).toArray(); // Again without an index. diff --git a/jstests/aggregation/bugs/server13715.js b/jstests/aggregation/bugs/server13715.js index f099480f935..27482cc1c46 100644 --- a/jstests/aggregation/bugs/server13715.js +++ b/jstests/aggregation/bugs/server13715.js @@ -12,7 +12,7 @@ assert.eq(1, cursor.next()["_id"]); assert.eq(0, cursor.next()["_id"]); // Repeat the test with an index. -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); cursor = t.aggregate([{$match: {$or: [{name: "red"}, {name: "blue"}]}}, {$sort: {value: 1}}]); assert.eq(1, cursor.next()["_id"]); diff --git a/jstests/aggregation/bugs/server14969.js b/jstests/aggregation/bugs/server14969.js index 15fd423f44a..0da44f18c6d 100644 --- a/jstests/aggregation/bugs/server14969.js +++ b/jstests/aggregation/bugs/server14969.js @@ -11,7 +11,7 @@ var longString = new Array(1024 * 1024).join('x'); for (var i = 0; i < 100; ++i) { assert.commandWorked(coll.insert({a: 1, bigField: longString})); } -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); // Create pipeline that uses index "a", with a small initial batch size. var cursor = coll.aggregate([{$match: {a: 1}}], {cursor: {batchSize: docsPerBatch}}); diff --git a/jstests/aggregation/bugs/server22093.js b/jstests/aggregation/bugs/server22093.js index b63cfd7aabb..e3a3268c048 100644 --- a/jstests/aggregation/bugs/server22093.js +++ b/jstests/aggregation/bugs/server22093.js @@ -26,7 +26,7 @@ for (var i = 0; i < 3; i++) { } } -coll.createIndex({foo: 1}); +coll.ensureIndex({foo: 1}); var simpleGroup = coll.aggregate([{$group: {_id: null, count: {$sum: 1}}}]).toArray(); diff --git a/jstests/aggregation/bugs/server3253.js b/jstests/aggregation/bugs/server3253.js index e3c9b4847c1..ac7ed42eed0 100644 --- a/jstests/aggregation/bugs/server3253.js +++ b/jstests/aggregation/bugs/server3253.js @@ -66,7 +66,7 @@ test(input, // test with indexes assert.eq(output.getIndexes().length, 1); -output.createIndex({a: 1}); +output.ensureIndex({a: 1}); assert.eq(output.getIndexes().length, 2); test(input, [{$project: {a: {$multiply: ['$_id', '$_id']}}}], @@ -77,12 +77,12 @@ test(input, [{$match: {_id: 11}}], []); assert.eq(output.getIndexes().length, 2); // test with geo index -output.createIndex({b: "2d"}); +output.ensureIndex({b: "2d"}); assert.eq(output.getIndexes().length, 3); test(input, [{$project: {b: "$_id"}}], [{_id: 1, b: 1}, {_id: 2, b: 2}, {_id: 3, b: 3}]); // test with full text index -output.createIndex({c: "text"}); +output.ensureIndex({c: "text"}); assert.eq(output.getIndexes().length, 4); test(input, [{$project: {c: {$concat: ["hello there ", "_id"]}}}], [ {_id: 1, c: "hello there _id"}, diff --git a/jstests/aggregation/bugs/server3832.js b/jstests/aggregation/bugs/server3832.js index 82b38ab3604..b2c59ccd244 100644 --- a/jstests/aggregation/bugs/server3832.js +++ b/jstests/aggregation/bugs/server3832.js @@ -25,7 +25,7 @@ var a3 = s3832.aggregate({$match: {b: "baz"}}, {$sort: {a: 1}}); assert.eq(a3.toArray(), a1result, 's3832.a3 failed'); -db.s3832.createIndex({b: 1}, {name: "s3832_b"}); +db.s3832.ensureIndex({b: 1}, {name: "s3832_b"}); var a4 = s3832.aggregate({$match: {b: "baz"}}); @@ -41,7 +41,7 @@ assert.eq(a6.toArray(), a1result, 's3832.a6 failed'); var dropb = db.s3832.dropIndex("s3832_b"); -db.s3832.createIndex({a: 1}, {name: "s3832_a"}); +db.s3832.ensureIndex({a: 1}, {name: "s3832_a"}); var a7 = s3832.aggregate({$match: {b: "baz"}}); diff --git a/jstests/aggregation/bugs/server6531.js b/jstests/aggregation/bugs/server6531.js index 46f09a0f379..cd2faae0eb7 100644 --- a/jstests/aggregation/bugs/server6531.js +++ b/jstests/aggregation/bugs/server6531.js @@ -23,9 +23,9 @@ function test(variant) { test("no index"); -c.createIndex({loc: "2d"}); +c.ensureIndex({loc: "2d"}); test("2d index"); c.dropIndex({loc: "2d"}); -c.createIndex({loc: "2dsphere"}); +c.ensureIndex({loc: "2dsphere"}); test("2dsphere index"); diff --git a/jstests/aggregation/bugs/server7781.js b/jstests/aggregation/bugs/server7781.js index 77f8bbc6866..586099df79f 100644 --- a/jstests/aggregation/bugs/server7781.js +++ b/jstests/aggregation/bugs/server7781.js @@ -67,7 +67,7 @@ function test(db, indexType) { assert.eq(db[coll].count(), numPts); - db[coll].createIndex({loc: indexType}); + db[coll].ensureIndex({loc: indexType}); // Test $geoNear with spherical coordinates. testGeoNearStageOutput({ diff --git a/jstests/aggregation/bugs/sort_arrays.js b/jstests/aggregation/bugs/sort_arrays.js index 488b0300381..a82837dfb70 100644 --- a/jstests/aggregation/bugs/sort_arrays.js +++ b/jstests/aggregation/bugs/sort_arrays.js @@ -11,7 +11,7 @@ const expectedOrder = [{_id: 4, a: [2, 1]}, {_id: 2, a: [2, 3]}, {_id: 3, a: [2, assert.eq(coll.aggregate([{$sort: {a: 1, _id: 1}}]).toArray(), expectedOrder); assert.eq(coll.find().sort({a: 1, _id: 1}).toArray(), expectedOrder); -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); assert.eq(coll.aggregate([{$sort: {a: 1, _id: 1}}]).toArray(), expectedOrder); assert.eq(coll.find().sort({a: 1, _id: 1}).toArray(), expectedOrder); }()); diff --git a/jstests/auth/basic_role_auth.js b/jstests/auth/basic_role_auth.js index b86f61dba9d..ff487bebbd9 100644 --- a/jstests/auth/basic_role_auth.js +++ b/jstests/auth/basic_role_auth.js @@ -129,7 +129,7 @@ var testOps = function(db, allowedActions) { }); checkErr(allowedActions.hasOwnProperty('index_w'), function() { - var res = db.user.createIndex({x: 1}); + var res = db.user.ensureIndex({x: 1}); if (res.code == 13) { // Unauthorized throw Error("unauthorized currentOp"); } diff --git a/jstests/auth/lib/commands_lib.js b/jstests/auth/lib/commands_lib.js index 8015d8dc143..80a1a6d99a6 100644 --- a/jstests/auth/lib/commands_lib.js +++ b/jstests/auth/lib/commands_lib.js @@ -3481,7 +3481,7 @@ var authCommandsLib = { setup: function(db) { db.fs.chunks.drop(); assert.writeOK(db.fs.chunks.insert({files_id: 1, n: 0, data: new BinData(0, "test")})); - assert.commandWorked(db.fs.chunks.createIndex({files_id: 1, n: 1})); + assert.commandWorked(db.fs.chunks.ensureIndex({files_id: 1, n: 1})); }, teardown: function(db) { db.fs.chunks.drop(); diff --git a/jstests/auth/readIndex.js b/jstests/auth/readIndex.js index 53c5d63ecba..27fd03a637f 100644 --- a/jstests/auth/readIndex.js +++ b/jstests/auth/readIndex.js @@ -12,7 +12,7 @@ testDB.createUser({user: 'dbAdmin', pwd: 'password', roles: ['dbAdmin']}); adminDB.logout(); testDB.auth('dbAdmin', 'password'); -testDB.foo.createIndex({a: 1}, {name: indexName}); +testDB.foo.ensureIndex({a: 1}, {name: indexName}); assert.eq(2, testDB.foo.getIndexes().length); // index on 'a' plus default _id index var indexList = testDB.foo.getIndexes().filter(function(idx) { return idx.name === indexName; diff --git a/jstests/concurrency/fsm_example_inheritance.js b/jstests/concurrency/fsm_example_inheritance.js index dd6364b2d87..8c45525d7e3 100644 --- a/jstests/concurrency/fsm_example_inheritance.js +++ b/jstests/concurrency/fsm_example_inheritance.js @@ -16,7 +16,7 @@ var $config = extendWorkload($config, function($config, $super) { // method on $super. $super.setup.apply(this, arguments); - db[collName].createIndex({exampleIndexedField: 1}); + db[collName].ensureIndex({exampleIndexedField: 1}); }; return $config; diff --git a/jstests/concurrency/fsm_workloads/agg_out.js b/jstests/concurrency/fsm_workloads/agg_out.js index 6c1d720558f..200ee7917fd 100644 --- a/jstests/concurrency/fsm_workloads/agg_out.js +++ b/jstests/concurrency/fsm_workloads/agg_out.js @@ -38,7 +38,7 @@ var $config = extendWorkload($config, function($config, $super) { $config.transitions = { query: { query: 0.68, - createIndexes: 0.1, + ensureIndexes: 0.1, dropIndex: 0.1, collMod: 0.1, // Converting the target collection to a capped collection or a sharded collection will @@ -47,7 +47,7 @@ var $config = extendWorkload($config, function($config, $super) { convertToCapped: 0.01, shardCollection: 0.01, }, - createIndexes: {query: 1}, + ensureIndexes: {query: 1}, dropIndex: {query: 1}, collMod: {query: 1}, convertToCapped: {query: 1}, @@ -85,9 +85,9 @@ var $config = extendWorkload($config, function($config, $super) { * Ensures all the indexes exist. This will have no affect unless some thread has already * dropped an index. */ - $config.states.createIndexes = function createIndexes(db, unusedCollName) { + $config.states.ensureIndexes = function ensureIndexes(db, unusedCollName) { for (var i = 0; i < this.indexSpecs; ++i) { - assertWhenOwnDB.commandWorked(db[this.outputCollName].createIndex(this.indexSpecs[i])); + assertWhenOwnDB.commandWorked(db[this.outputCollName].ensureIndex(this.indexSpecs[i])); } }; diff --git a/jstests/concurrency/fsm_workloads/collmod.js b/jstests/concurrency/fsm_workloads/collmod.js index fdb93bfc65a..095602b43af 100644 --- a/jstests/concurrency/fsm_workloads/collmod.js +++ b/jstests/concurrency/fsm_workloads/collmod.js @@ -48,7 +48,7 @@ var $config = (function() { assertAlways.eq(this.numDocs, res.nInserted); // create TTL index - res = db[this.threadCollName].createIndex({createdAt: 1}, {expireAfterSeconds: 3600}); + res = db[this.threadCollName].ensureIndex({createdAt: 1}, {expireAfterSeconds: 3600}); assertAlways.commandWorked(res); } diff --git a/jstests/concurrency/fsm_workloads/compact.js b/jstests/concurrency/fsm_workloads/compact.js index 558cd5b5fd4..cae5571f733 100644 --- a/jstests/concurrency/fsm_workloads/compact.js +++ b/jstests/concurrency/fsm_workloads/compact.js @@ -37,15 +37,15 @@ var $config = (function() { function createIndexes(db, collName) { // The number of indexes created here is also stored in data.nIndexes - var aResult = db[collName].createIndex({a: 1}); + var aResult = db[collName].ensureIndex({a: 1}); assertWorkedHandleTxnErrors(aResult, ErrorCodes.IndexBuildAlreadyInProgress); - var bResult = db[collName].createIndex({b: 1}); + var bResult = db[collName].ensureIndex({b: 1}); assertWorkedHandleTxnErrors(bResult, ErrorCodes.IndexBuildAlreadyInProgress); - var cResult = db[collName].createIndex({c: 1}); + var cResult = db[collName].ensureIndex({c: 1}); assertWorkedHandleTxnErrors(cResult, ErrorCodes.IndexBuildAlreadyInProgress); } diff --git a/jstests/concurrency/fsm_workloads/convert_to_capped_collection_index.js b/jstests/concurrency/fsm_workloads/convert_to_capped_collection_index.js index be4414f642d..70c2fbc3b4c 100644 --- a/jstests/concurrency/fsm_workloads/convert_to_capped_collection_index.js +++ b/jstests/concurrency/fsm_workloads/convert_to_capped_collection_index.js @@ -20,7 +20,7 @@ load('jstests/concurrency/fsm_workloads/convert_to_capped_collection.js'); // f var $config = extendWorkload($config, function($config, $super) { $config.states.convertToCapped = function convertToCapped(db, collName) { - assertWhenOwnDB.commandWorked(db[this.threadCollName].createIndex({i: 1, rand: 1})); + assertWhenOwnDB.commandWorked(db[this.threadCollName].ensureIndex({i: 1, rand: 1})); assertWhenOwnDB.eq(2, db[this.threadCollName].getIndexes().length); $super.states.convertToCapped.apply(this, arguments); }; diff --git a/jstests/concurrency/fsm_workloads/count_indexed.js b/jstests/concurrency/fsm_workloads/count_indexed.js index 9887d1a113e..b8041d5f91a 100644 --- a/jstests/concurrency/fsm_workloads/count_indexed.js +++ b/jstests/concurrency/fsm_workloads/count_indexed.js @@ -25,7 +25,7 @@ var $config = extendWorkload($config, function($config, $super) { $config.states.init = function init(db, collName) { this.threadCollName = this.prefix + '_' + this.tid; $super.states.init.apply(this, arguments); - assertAlways.commandWorked(db[this.threadCollName].createIndex({tid: 1, i: 1})); + assertAlways.commandWorked(db[this.threadCollName].ensureIndex({tid: 1, i: 1})); }; return $config; diff --git a/jstests/concurrency/fsm_workloads/create_index_background.js b/jstests/concurrency/fsm_workloads/create_index_background.js index 2a55b307086..e183a33e36d 100644 --- a/jstests/concurrency/fsm_workloads/create_index_background.js +++ b/jstests/concurrency/fsm_workloads/create_index_background.js @@ -202,7 +202,7 @@ var $config = (function() { var nSetupDocs = this.nDocumentsToSeed * 200; var coll = db[collName]; - var res = coll.createIndex({tid: 1}); + var res = coll.ensureIndex({tid: 1}); assertAlways.commandWorked(res, tojson(res)); var bulk = coll.initializeUnorderedBulkOp(); diff --git a/jstests/concurrency/fsm_workloads/distinct.js b/jstests/concurrency/fsm_workloads/distinct.js index 2c56372c7d7..2832ea215d3 100644 --- a/jstests/concurrency/fsm_workloads/distinct.js +++ b/jstests/concurrency/fsm_workloads/distinct.js @@ -21,7 +21,7 @@ var $config = (function() { var res = bulk.execute(); assertAlways.commandWorked(res); assertAlways.eq(this.numDocs, res.nInserted); - assertAlways.commandWorked(db[this.threadCollName].createIndex({i: 1})); + assertAlways.commandWorked(db[this.threadCollName].ensureIndex({i: 1})); } function distinct(db, collName) { diff --git a/jstests/concurrency/fsm_workloads/explain.js b/jstests/concurrency/fsm_workloads/explain.js index ca20aa4b8c9..b4943a23300 100644 --- a/jstests/concurrency/fsm_workloads/explain.js +++ b/jstests/concurrency/fsm_workloads/explain.js @@ -26,7 +26,7 @@ var $config = (function() { }; function setup(db, collName, cluster) { - assertAlways.commandWorked(db[collName].createIndex({j: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({j: 1})); } var states = (function() { diff --git a/jstests/concurrency/fsm_workloads/findAndModify_remove_queue.js b/jstests/concurrency/fsm_workloads/findAndModify_remove_queue.js index e902ceb1959..6c49a7cc249 100644 --- a/jstests/concurrency/fsm_workloads/findAndModify_remove_queue.js +++ b/jstests/concurrency/fsm_workloads/findAndModify_remove_queue.js @@ -97,8 +97,8 @@ var $config = (function() { assertAlways.commandWorked(res); assertAlways.eq(this.numDocs, res.nInserted); - this.getIndexSpecs().forEach(function createIndex(indexSpec) { - assertAlways.commandWorked(db[collName].createIndex(indexSpec)); + this.getIndexSpecs().forEach(function ensureIndex(indexSpec) { + assertAlways.commandWorked(db[collName].ensureIndex(indexSpec)); }); } diff --git a/jstests/concurrency/fsm_workloads/findAndModify_update.js b/jstests/concurrency/fsm_workloads/findAndModify_update.js index e97281b5a8a..9035e6f472f 100644 --- a/jstests/concurrency/fsm_workloads/findAndModify_update.js +++ b/jstests/concurrency/fsm_workloads/findAndModify_update.js @@ -83,7 +83,7 @@ var $config = (function() { }; function setup(db, collName, cluster) { - var res = db[collName].createIndex({tid: 1, value: 1}); + var res = db[collName].ensureIndex({tid: 1, value: 1}); assertAlways.commandWorked(res); } diff --git a/jstests/concurrency/fsm_workloads/indexed_insert_text.js b/jstests/concurrency/fsm_workloads/indexed_insert_text.js index cb467a03a4a..beea5501dd7 100644 --- a/jstests/concurrency/fsm_workloads/indexed_insert_text.js +++ b/jstests/concurrency/fsm_workloads/indexed_insert_text.js @@ -37,7 +37,7 @@ var $config = (function() { var ixSpec = {}; ixSpec[this.indexedField] = 'text'; // Only allowed to create one text index, other tests may create one. - assertWhenOwnColl.commandWorked(db[collName].createIndex(ixSpec)); + assertWhenOwnColl.commandWorked(db[collName].ensureIndex(ixSpec)); } var text = [ diff --git a/jstests/concurrency/fsm_workloads/indexed_insert_ttl.js b/jstests/concurrency/fsm_workloads/indexed_insert_ttl.js index b0d999076e7..5a54c673cac 100644 --- a/jstests/concurrency/fsm_workloads/indexed_insert_ttl.js +++ b/jstests/concurrency/fsm_workloads/indexed_insert_ttl.js @@ -27,7 +27,7 @@ var $config = (function() { var transitions = {init: {insert: 1}, insert: {insert: 1}}; function setup(db, collName, cluster) { - var res = db[collName].createIndex({indexed_insert_ttl: 1}, + var res = db[collName].ensureIndex({indexed_insert_ttl: 1}, {expireAfterSeconds: this.ttlSeconds}); assertAlways.commandWorked(res); } diff --git a/jstests/concurrency/fsm_workloads/indexed_insert_where.js b/jstests/concurrency/fsm_workloads/indexed_insert_where.js index 4cd751c1e1c..5233c6c3e48 100644 --- a/jstests/concurrency/fsm_workloads/indexed_insert_where.js +++ b/jstests/concurrency/fsm_workloads/indexed_insert_where.js @@ -42,7 +42,7 @@ var $config = (function() { var transitions = {insert: {insert: 0.2, query: 0.8}, query: {insert: 0.8, query: 0.2}}; var setup = function setup(db, collName, cluster) { - assertAlways.commandWorked(db[collName].createIndex({tid: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({tid: 1})); }; return { diff --git a/jstests/concurrency/fsm_workloads/list_indexes.js b/jstests/concurrency/fsm_workloads/list_indexes.js index 687f871a378..ba5549e1e68 100644 --- a/jstests/concurrency/fsm_workloads/list_indexes.js +++ b/jstests/concurrency/fsm_workloads/list_indexes.js @@ -15,7 +15,7 @@ var $config = (function() { assertWhenOwnColl.commandWorked(db[collName].dropIndex(spec)); sleep(100); - assertWhenOwnColl.commandWorked(db[collName].createIndex(spec)); + assertWhenOwnColl.commandWorked(db[collName].ensureIndex(spec)); } // List indexes, using a batchSize of 2 to ensure getmores happen. @@ -38,7 +38,7 @@ var $config = (function() { for (var i = 0; i < this.threadCount; ++i) { var spec = {}; spec['foo' + i] = 1; - assertAlways.commandWorked(db[collName].createIndex(spec)); + assertAlways.commandWorked(db[collName].ensureIndex(spec)); } } diff --git a/jstests/concurrency/fsm_workloads/update_array.js b/jstests/concurrency/fsm_workloads/update_array.js index 99e31e735a3..457392279fd 100644 --- a/jstests/concurrency/fsm_workloads/update_array.js +++ b/jstests/concurrency/fsm_workloads/update_array.js @@ -109,7 +109,7 @@ var $config = (function() { function setup(db, collName, cluster) { // index on 'arr', the field being updated - assertAlways.commandWorked(db[collName].createIndex({arr: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({arr: 1})); for (var i = 0; i < this.numDocs; ++i) { var res = db[collName].insert({_id: i, arr: []}); assertWhenOwnColl.commandWorked(res); diff --git a/jstests/concurrency/fsm_workloads/update_check_index.js b/jstests/concurrency/fsm_workloads/update_check_index.js index 71b8d32dfae..8cfa98f6c84 100644 --- a/jstests/concurrency/fsm_workloads/update_check_index.js +++ b/jstests/concurrency/fsm_workloads/update_check_index.js @@ -20,9 +20,9 @@ var $config = (function() { var transitions = {multiUpdate: {multiUpdate: 1.0}}; function setup(db, collName, cluster) { - assertAlways.commandWorked(db[collName].createIndex({a: 1})); - assertAlways.commandWorked(db[collName].createIndex({b: 1})); - assertAlways.commandWorked(db[collName].createIndex({c: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({a: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({b: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({c: 1})); for (var i = 0; i < 10; i++) { assertAlways.commandWorked(db[collName].insert({a: 1, b: 1, c: 1})); diff --git a/jstests/concurrency/fsm_workloads/update_multifield.js b/jstests/concurrency/fsm_workloads/update_multifield.js index 311039d3877..25be0291c5a 100644 --- a/jstests/concurrency/fsm_workloads/update_multifield.js +++ b/jstests/concurrency/fsm_workloads/update_multifield.js @@ -52,10 +52,10 @@ var $config = (function() { var transitions = {update: {update: 1}}; function setup(db, collName, cluster) { - assertAlways.commandWorked(db[collName].createIndex({x: 1})); - assertAlways.commandWorked(db[collName].createIndex({y: 1})); - assertAlways.commandWorked(db[collName].createIndex({z: 1})); - assertAlways.commandWorked(db[collName].createIndex({x: 1, y: 1, z: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({x: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({y: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({z: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({x: 1, y: 1, z: 1})); // numDocs should be much less than threadCount, to make more threads use the same docs. this.numDocs = Math.floor(this.threadCount / 3); diff --git a/jstests/concurrency/fsm_workloads/update_rename.js b/jstests/concurrency/fsm_workloads/update_rename.js index f76bbd5b81b..c542382fc89 100644 --- a/jstests/concurrency/fsm_workloads/update_rename.js +++ b/jstests/concurrency/fsm_workloads/update_rename.js @@ -43,7 +43,7 @@ var $config = (function() { fieldNames.slice(1).forEach(function(fieldName) { var indexSpec = {}; indexSpec[fieldName] = 1; - assertAlways.commandWorked(db[collName].createIndex(indexSpec)); + assertAlways.commandWorked(db[collName].ensureIndex(indexSpec)); }); // numDocs should be much less than threadCount, to make more threads use the same docs. diff --git a/jstests/concurrency/fsm_workloads/update_replace.js b/jstests/concurrency/fsm_workloads/update_replace.js index 1d789b8eccc..c52c12f05a9 100644 --- a/jstests/concurrency/fsm_workloads/update_replace.js +++ b/jstests/concurrency/fsm_workloads/update_replace.js @@ -57,12 +57,12 @@ var $config = (function() { var transitions = {update: {update: 1}}; function setup(db, collName, cluster) { - assertAlways.commandWorked(db[collName].createIndex({a: 1})); - assertAlways.commandWorked(db[collName].createIndex({b: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({a: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({b: 1})); // no index on c - assertAlways.commandWorked(db[collName].createIndex({x: 1})); - assertAlways.commandWorked(db[collName].createIndex({y: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({x: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({y: 1})); // no index on z // numDocs should be much less than threadCount, to make more threads use the same docs. diff --git a/jstests/concurrency/fsm_workloads/update_simple.js b/jstests/concurrency/fsm_workloads/update_simple.js index 519d807b855..2d6754ec93a 100644 --- a/jstests/concurrency/fsm_workloads/update_simple.js +++ b/jstests/concurrency/fsm_workloads/update_simple.js @@ -27,7 +27,7 @@ var $config = (function() { function setup(db, collName, cluster) { // index on 'value', the field being updated - assertAlways.commandWorked(db[collName].createIndex({value: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({value: 1})); // numDocs should be much less than threadCount, to make more threads use the same docs. this.numDocs = Math.floor(this.threadCount / 5); diff --git a/jstests/concurrency/fsm_workloads/update_upsert_multi.js b/jstests/concurrency/fsm_workloads/update_upsert_multi.js index 34d81924bb6..bffcbc232fa 100644 --- a/jstests/concurrency/fsm_workloads/update_upsert_multi.js +++ b/jstests/concurrency/fsm_workloads/update_upsert_multi.js @@ -66,7 +66,7 @@ var $config = (function() { }; function setup(db, collName, cluster) { - assertAlways.commandWorked(db[collName].createIndex({tid: 1, i: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({tid: 1, i: 1})); } return { diff --git a/jstests/concurrency/fsm_workloads/yield_geo_near.js b/jstests/concurrency/fsm_workloads/yield_geo_near.js index f3016c5332e..e6509bb7503 100644 --- a/jstests/concurrency/fsm_workloads/yield_geo_near.js +++ b/jstests/concurrency/fsm_workloads/yield_geo_near.js @@ -74,7 +74,7 @@ var $config = extendWorkload($config, function($config, $super) { } } assertAlways.commandWorked(bulk.execute()); - assertAlways.commandWorked(db[collName].createIndex(this.getIndexSpec())); + assertAlways.commandWorked(db[collName].ensureIndex(this.getIndexSpec())); }; return $config; diff --git a/jstests/concurrency/fsm_workloads/yield_rooted_or.js b/jstests/concurrency/fsm_workloads/yield_rooted_or.js index 7b5cd4b3cdd..b21e918e5bc 100644 --- a/jstests/concurrency/fsm_workloads/yield_rooted_or.js +++ b/jstests/concurrency/fsm_workloads/yield_rooted_or.js @@ -37,8 +37,8 @@ var $config = extendWorkload($config, function($config, $super) { $config.setup = function setup(db, collName, cluster) { $super.setup.apply(this, arguments); - assertAlways.commandWorked(db[collName].createIndex({c: 1})); - assertAlways.commandWorked(db[collName].createIndex({d: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({c: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({d: 1})); }; return $config; diff --git a/jstests/concurrency/fsm_workloads/yield_sort_merge.js b/jstests/concurrency/fsm_workloads/yield_sort_merge.js index 2962744a482..b66f185854d 100644 --- a/jstests/concurrency/fsm_workloads/yield_sort_merge.js +++ b/jstests/concurrency/fsm_workloads/yield_sort_merge.js @@ -45,7 +45,7 @@ var $config = extendWorkload($config, function($config, $super) { $config.setup = function setup(db, collName, cluster) { $super.setup.apply(this, arguments); - assertAlways.commandWorked(db[collName].createIndex({a: 1, b: 1})); + assertAlways.commandWorked(db[collName].ensureIndex({a: 1, b: 1})); }; return $config; diff --git a/jstests/concurrency/fsm_workloads/yield_text.js b/jstests/concurrency/fsm_workloads/yield_text.js index 2bd4a5608ff..2b14a051b73 100644 --- a/jstests/concurrency/fsm_workloads/yield_text.js +++ b/jstests/concurrency/fsm_workloads/yield_text.js @@ -42,7 +42,7 @@ var $config = extendWorkload($config, function($config, $super) { $config.setup = function setup(db, collName, cluster) { $super.setup.apply(this, arguments); - assertWhenOwnColl.commandWorked(db[collName].createIndex({yield_text: 'text'})); + assertWhenOwnColl.commandWorked(db[collName].ensureIndex({yield_text: 'text'})); }; return $config; diff --git a/jstests/core/all.js b/jstests/core/all.js index a718e2615e8..9d142e6e6c4 100644 --- a/jstests/core/all.js +++ b/jstests/core/all.js @@ -39,5 +39,5 @@ doTest = function() { doTest(); t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); doTest(); diff --git a/jstests/core/all2.js b/jstests/core/all2.js index 44462787d20..c6b4170a7ff 100644 --- a/jstests/core/all2.js +++ b/jstests/core/all2.js @@ -29,7 +29,7 @@ check(1, {"a.x": {$all: [1, 2]}}, "F"); check(1, {"a.x": {$all: [2, 3]}}, "G"); check(0, {"a.x": {$all: [1, 3]}}, "H"); -t.createIndex({"a.x": 1}); +t.ensureIndex({"a.x": 1}); state = "index"; check(1, {"a.x": {$in: [1]}}, "A"); @@ -64,7 +64,7 @@ check(1, {"a": {$all: [1, 2]}}, "F"); check(1, {"a": {$all: [2, 3]}}, "G"); check(0, {"a": {$all: [1, 3]}}, "H"); -t.createIndex({"a": 1}); +t.ensureIndex({"a": 1}); state = "more index"; check(1, {"a": {$in: [1]}}, "A"); @@ -85,5 +85,5 @@ state = "more 2"; t.drop(); t.save({name: ["harry", "jack", "tom"]}); check(0, {name: {$all: ["harry", "john"]}}, "A"); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); check(0, {name: {$all: ["harry", "john"]}}, "B"); diff --git a/jstests/core/and.js b/jstests/core/and.js index 20fd583c31f..389aaa8d1d1 100644 --- a/jstests/core/and.js +++ b/jstests/core/and.js @@ -77,7 +77,7 @@ function check() { } check(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); check(); assert.eq(1, t.find({a: 1, $and: [{a: 2}]}).itcount()); diff --git a/jstests/core/and3.js b/jstests/core/and3.js index 1e74db57594..6fd8e63d910 100644 --- a/jstests/core/and3.js +++ b/jstests/core/and3.js @@ -12,7 +12,7 @@ t.drop(); t.save({a: 1}); t.save({a: 'foo'}); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); function checkScanMatch(query, docsExamined, n) { var e = t.find(query).hint({a: 1}).explain("executionStats"); diff --git a/jstests/core/andor.js b/jstests/core/andor.js index 5bac12d83ca..e5e665ec398 100644 --- a/jstests/core/andor.js +++ b/jstests/core/andor.js @@ -47,7 +47,7 @@ test = function() { }; test(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); test(); // Test an inequality base match. @@ -91,5 +91,5 @@ test = function() { t.drop(); t.save({a: 1}); test(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); test(); diff --git a/jstests/core/apitest_dbcollection.js b/jstests/core/apitest_dbcollection.js index 00f9b6b4c4c..9bdbb8d0f91 100644 --- a/jstests/core/apitest_dbcollection.js +++ b/jstests/core/apitest_dbcollection.js @@ -99,7 +99,7 @@ assert.eq(0, db.getCollection("test_db").getIndexes().length, "13"); db.getCollection("test_db").save({a: 10}); assert.eq(1, db.getCollection("test_db").getIndexes().length, "14"); -db.getCollection("test_db").createIndex({a: 1}); +db.getCollection("test_db").ensureIndex({a: 1}); db.getCollection("test_db").save({a: 10}); print(tojson(db.getCollection("test_db").getIndexes())); @@ -109,7 +109,7 @@ db.getCollection("test_db").dropIndex({a: 1}); assert.eq(1, db.getCollection("test_db").getIndexes().length, "16"); db.getCollection("test_db").save({a: 10}); -db.getCollection("test_db").createIndex({a: 1}); +db.getCollection("test_db").ensureIndex({a: 1}); db.getCollection("test_db").save({a: 10}); assert.eq(2, db.getCollection("test_db").getIndexes().length, "17"); @@ -118,8 +118,8 @@ db.getCollection("test_db").dropIndex("a_1"); assert.eq(1, db.getCollection("test_db").getIndexes().length, "18"); db.getCollection("test_db").save({a: 10, b: 11}); -db.getCollection("test_db").createIndex({a: 1}); -db.getCollection("test_db").createIndex({b: 1}); +db.getCollection("test_db").ensureIndex({a: 1}); +db.getCollection("test_db").ensureIndex({b: 1}); db.getCollection("test_db").save({a: 10, b: 12}); assert.eq(3, db.getCollection("test_db").getIndexes().length, "19"); @@ -130,8 +130,8 @@ db.getCollection("test_db").dropIndex({a: 1}); assert.eq(1, db.getCollection("test_db").getIndexes().length, "21"); db.getCollection("test_db").save({a: 10, b: 11}); -db.getCollection("test_db").createIndex({a: 1}); -db.getCollection("test_db").createIndex({b: 1}); +db.getCollection("test_db").ensureIndex({a: 1}); +db.getCollection("test_db").ensureIndex({b: 1}); db.getCollection("test_db").save({a: 10, b: 12}); assert.eq(3, db.getCollection("test_db").getIndexes().length, "22"); @@ -179,7 +179,7 @@ assert.eq(10, // indexDetails - If true, includes 'indexDetails' field in results. Default: false. t.drop(); t.save({a: 1}); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); collectionStats = assert.commandWorked(t.stats()); assert(!collectionStats.hasOwnProperty('indexDetails'), 'unexpected indexDetails found in db.collection.stats() result: ' + tojson(collectionStats)); diff --git a/jstests/core/array1.js b/jstests/core/array1.js index d25b609f3d3..27addaed616 100644 --- a/jstests/core/array1.js +++ b/jstests/core/array1.js @@ -14,6 +14,6 @@ assert.eq(1, coll.find(x).count()); assert.commandWorked(coll.insert(x)); assert.eq(2, coll.find(x).count()); -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); assert.eq(2, coll.find(x).count()); }()); diff --git a/jstests/core/array_match1.js b/jstests/core/array_match1.js index 0c56e8d4c34..b6a0930968e 100644 --- a/jstests/core/array_match1.js +++ b/jstests/core/array_match1.js @@ -16,7 +16,7 @@ function test(f, m) { } test("a", "A"); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); test("a", "B"); t.drop(); @@ -26,5 +26,5 @@ t.insert({_id: 2, a: {b: [6, 6]}}); t.insert({_id: 3, a: {b: [5, 5]}}); test("a.b", "C"); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); test("a.b", "D"); diff --git a/jstests/core/array_match3.js b/jstests/core/array_match3.js index 4990bdd90fd..837341afc8a 100644 --- a/jstests/core/array_match3.js +++ b/jstests/core/array_match3.js @@ -9,5 +9,5 @@ t.save({a: [5]}); assert.eq(2, t.count({'a.0': 5})); // Test with index. -t.createIndex({'a.0': 1}); +t.ensureIndex({'a.0': 1}); assert.eq(2, t.count({'a.0': 5})); diff --git a/jstests/core/array_match4.js b/jstests/core/array_match4.js index 54581a14b97..821e9a4f4eb 100644 --- a/jstests/core/array_match4.js +++ b/jstests/core/array_match4.js @@ -16,7 +16,7 @@ assert.eq(1, t.find(query_gte).itcount(), '$gte (without index)'); // with index // -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(1, t.find({a: [1, 2]}).count(), '$eq (with index)'); // display explain output (for index bounds) diff --git a/jstests/core/arrayfind1.js b/jstests/core/arrayfind1.js index 4e9330549ae..c9d75c17f65 100644 --- a/jstests/core/arrayfind1.js +++ b/jstests/core/arrayfind1.js @@ -26,7 +26,7 @@ t.save({a: [{x: 4}]}); assert.eq(1, t.find({a: {$elemMatch: {x: 2}}}).count(), "B1"); assert.eq(2, t.find({a: {$elemMatch: {x: {$gt: 2}}}}).count(), "B2"); -t.createIndex({"a.x": 1}); +t.ensureIndex({"a.x": 1}); assert.eq(1, t.find({a: {$elemMatch: {x: 2}}}).count(), "D1"); assert.eq(3, t.find({"a.x": 1}).count(), "D2.1"); assert.eq(3, t.find({"a.x": {$gt: 1}}).count(), "D2.2"); diff --git a/jstests/core/arrayfind2.js b/jstests/core/arrayfind2.js index 38de844f6f4..bbceffaa126 100644 --- a/jstests/core/arrayfind2.js +++ b/jstests/core/arrayfind2.js @@ -25,5 +25,5 @@ t.save({a: [{x: 3}, {x: 5}]}); t.save({a: [{x: 3}, {x: 6}]}); go("no index"); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); go("index(a)"); diff --git a/jstests/core/arrayfind3.js b/jstests/core/arrayfind3.js index 6dba0bf625f..312ae4c0349 100644 --- a/jstests/core/arrayfind3.js +++ b/jstests/core/arrayfind3.js @@ -8,7 +8,7 @@ t.save({a: [1, 4, 6]}); assert.eq(2, t.find({a: {$gte: 3, $lte: 5}}).itcount(), "A1"); assert.eq(1, t.find({a: {$elemMatch: {$gte: 3, $lte: 5}}}).itcount(), "A2"); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(2, t.find({a: {$gte: 3, $lte: 5}}).itcount(), "B1"); assert.eq(1, t.find({a: {$elemMatch: {$gte: 3, $lte: 5}}}).itcount(), "B2"); diff --git a/jstests/core/arrayfind4.js b/jstests/core/arrayfind4.js index 2d7c0e03668..4fac0b63755 100644 --- a/jstests/core/arrayfind4.js +++ b/jstests/core/arrayfind4.js @@ -8,7 +8,7 @@ t = db.jstests_arrayfind4; t.drop(); t.save({a: []}); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(1, t.find({a: []}).hint({$natural: 1}).itcount()); assert.eq(1, t.find({a: []}).hint({a: 1}).itcount()); diff --git a/jstests/core/arrayfind5.js b/jstests/core/arrayfind5.js index 171fe49e1f8..9f8800a0c69 100644 --- a/jstests/core/arrayfind5.js +++ b/jstests/core/arrayfind5.js @@ -16,12 +16,12 @@ function check(nullElemMatch) { t.save({a: [{}, {b: 1}]}); check(true); -t.createIndex({'a.b': 1}); +t.ensureIndex({'a.b': 1}); check(true); t.drop(); t.save({a: [5, {b: 1}]}); check(false); -t.createIndex({'a.b': 1}); +t.ensureIndex({'a.b': 1}); check(false); diff --git a/jstests/core/arrayfind6.js b/jstests/core/arrayfind6.js index bd91859c9dc..f01271b6673 100644 --- a/jstests/core/arrayfind6.js +++ b/jstests/core/arrayfind6.js @@ -17,5 +17,5 @@ function checkElemMatchMatches() { } checkElemMatchMatches(); -t.createIndex({'a.b': 1}); +t.ensureIndex({'a.b': 1}); checkElemMatchMatches(); diff --git a/jstests/core/arrayfind7.js b/jstests/core/arrayfind7.js index be2061c5c0d..699f8c9586d 100644 --- a/jstests/core/arrayfind7.js +++ b/jstests/core/arrayfind7.js @@ -11,7 +11,7 @@ function checkElemMatchMatches() { // The document is matched using nested $elemMatch expressions, with and without an index. checkElemMatchMatches(); -t.createIndex({'a.b.c': 1}); +t.ensureIndex({'a.b.c': 1}); checkElemMatchMatches(); function checkElemMatch(index, document, query) { @@ -19,7 +19,7 @@ function checkElemMatch(index, document, query) { t.drop(); t.save(document); assert.eq(1, t.count(query)); - t.createIndex(index); + t.ensureIndex(index); assert.eq(1, t.count(query)); t.save({a: {b: {c: [10, 11]}}}); // Make the index multikey. assert.eq(1, t.count(query)); diff --git a/jstests/core/arrayfind9.js b/jstests/core/arrayfind9.js index 5406ae8c1d1..98396701dce 100644 --- a/jstests/core/arrayfind9.js +++ b/jstests/core/arrayfind9.js @@ -25,8 +25,8 @@ assert.eq(1, t.count({a: {$elemMatch: {'0': 'x'}}})); // Matching multiple values of a nested array. t.drop(); t.save({a: [{b: [0, 2]}]}); -t.createIndex({a: 1}); -t.createIndex({'a.b': 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({'a.b': 1}); plans = [{$natural: 1}, {a: 1}, {'a.b': 1}]; for (i in plans) { p = plans[i]; diff --git a/jstests/core/arrayfinda.js b/jstests/core/arrayfinda.js index 163af3d8d29..f2939d0c1ba 100644 --- a/jstests/core/arrayfinda.js +++ b/jstests/core/arrayfinda.js @@ -16,6 +16,6 @@ assertExpectedMatch(t.find({a: {$elemMatch: {b: {$gte: 1}}}})); assertExpectedMatch(t.find({a: {$elemMatch: {b: 1}}})); // $elemMatch is not used to perform key matching. SERVER-6001 -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assertExpectedMatch(t.find({a: {$elemMatch: {b: {$gte: 1}}}}).hint({a: 1})); assertExpectedMatch(t.find({a: {$elemMatch: {b: 1}}}).hint({a: 1})); diff --git a/jstests/core/arrayfindb.js b/jstests/core/arrayfindb.js index 7277f51c4f4..c9456509487 100644 --- a/jstests/core/arrayfindb.js +++ b/jstests/core/arrayfindb.js @@ -12,7 +12,7 @@ assert.eq(0, t.find({a: {$elemMatch: {b: {$gte: 2, $lt: 4}, c: 25}}}).itcount(), "Case #1: wrong number of results returned -- unindexed"); -t.createIndex({"a.b": 1, "a.c": 1}); +t.ensureIndex({"a.b": 1, "a.c": 1}); assert.eq(0, t.find({a: {$elemMatch: {b: {$gte: 2, $lt: 4}, c: 25}}}).itcount(), "Case #1: wrong number of results returned -- indexed"); @@ -26,8 +26,8 @@ assert.eq(2, t.find({a: {$elemMatch: {$or: [{b: 2}, {c: 2}]}}}).itcount(), "Case #2: wrong number of results returned -- unindexed"); -t.createIndex({"a.b": 1}); -t.createIndex({"a.c": 1}); +t.ensureIndex({"a.b": 1}); +t.ensureIndex({"a.c": 1}); assert.eq(2, t.find({a: {$elemMatch: {$or: [{b: 2}, {c: 2}]}}}).itcount(), "Case #2: wrong number of results returned -- indexed"); diff --git a/jstests/core/bad_index_plugin.js b/jstests/core/bad_index_plugin.js index c9cd549cc03..7ecfe76c198 100644 --- a/jstests/core/bad_index_plugin.js +++ b/jstests/core/bad_index_plugin.js @@ -1,10 +1,10 @@ // SERVER-5826 ensure you can't build an index with a non-existent plugin t = db.bad_index_plugin; -assert.commandWorked(t.createIndex({good: 1})); +assert.commandWorked(t.ensureIndex({good: 1})); assert.eq(t.getIndexes().length, 2); // good + _id -var err = t.createIndex({bad: 'bad'}); +var err = t.ensureIndex({bad: 'bad'}); assert.commandFailed(err); assert(err.code >= 0); diff --git a/jstests/core/basic7.js b/jstests/core/basic7.js index dc6f18cc95b..bfe82ccda17 100644 --- a/jstests/core/basic7.js +++ b/jstests/core/basic7.js @@ -3,7 +3,7 @@ t = db.basic7; t.drop(); t.save({a: 1}); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(t.find().toArray()[0].a, 1); assert.eq(t.find().arrayAccess(0).a, 1); diff --git a/jstests/core/batch_size.js b/jstests/core/batch_size.js index c0afc382975..11ea9cd2380 100644 --- a/jstests/core/batch_size.js +++ b/jstests/core/batch_size.js @@ -46,7 +46,7 @@ assert.eq(1, t.find().batchSize(-1).itcount()); assert.eq(2, t.find().batchSize(-2).itcount()); // Run the tests with the index twice in order to double check plan caching. -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); for (var i = 0; i < 2; i++) { runIndexedTests(); } @@ -54,8 +54,8 @@ for (var i = 0; i < 2; i++) { // The next tests make sure that we obey limit and batchSize properly when the sort could be // either indexed or unindexed. t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); for (var i = 0; i < 100; i++) { t.save({_id: i, a: i, b: 1}); @@ -118,8 +118,8 @@ for (var i = 0; i < nDocs; i++) { } // Two indices needed in order to trigger plan ranking. Neither index provides the sort order. -t.createIndex({x: 1}); -t.createIndex({y: 1}); +t.ensureIndex({x: 1}); +t.ensureIndex({y: 1}); // We should only buffer 3 docs in memory. var cursor = t.find({x: 1, y: 1}).sort({z: -1}).limit(3); diff --git a/jstests/core/batch_write_command_insert.js b/jstests/core/batch_write_command_insert.js index 664ff73958a..cf1b0013ef7 100644 --- a/jstests/core/batch_write_command_insert.js +++ b/jstests/core/batch_write_command_insert.js @@ -179,7 +179,7 @@ assert(resultNOK(result), tojson(result)); // // Should fail single insert due to duplicate key coll.drop(); -coll.createIndex({a: 1}, {unique: true}); +coll.ensureIndex({a: 1}, {unique: true}); coll.insert({a: 1}); request = { insert: coll.getName(), @@ -194,7 +194,7 @@ assert.eq(coll.count(), 1); // // Fail with duplicate key error on multiple document inserts, ordered false coll.drop(); -coll.createIndex({a: 1}, {unique: true}); +coll.ensureIndex({a: 1}, {unique: true}); request = { insert: coll.getName(), documents: [{a: 1}, {a: 1}, {a: 1}], @@ -220,7 +220,7 @@ assert.eq(coll.count(), 1); // // Fail with duplicate key error on multiple document inserts, ordered true coll.drop(); -coll.createIndex({a: 1}, {unique: true}); +coll.ensureIndex({a: 1}, {unique: true}); request = { insert: coll.getName(), documents: [{a: 1}, {a: 1}, {a: 1}], @@ -241,7 +241,7 @@ assert.eq(coll.count(), 1); // // Ensure _id is the first field in all documents coll.drop(); -coll.createIndex({a: 1}, {unique: true}); +coll.ensureIndex({a: 1}, {unique: true}); request = { insert: coll.getName(), documents: [{a: 1}, {a: 2, _id: 2}] diff --git a/jstests/core/batch_write_command_update.js b/jstests/core/batch_write_command_update.js index f6372a651af..edb90be8523 100644 --- a/jstests/core/batch_write_command_update.js +++ b/jstests/core/batch_write_command_update.js @@ -235,7 +235,7 @@ assert.eq(1, coll.count()); // // Upsert fail due to duplicate key index, w:1, ordered:true coll.drop(); -coll.createIndex({a: 1}, {unique: true}); +coll.ensureIndex({a: 1}, {unique: true}); request = { update: coll.getName(), updates: [ @@ -266,7 +266,7 @@ assert.eq(1, coll.count({_id: result.upserted[1]._id})); // // Upsert fail due to duplicate key index, w:1, ordered:false coll.drop(); -coll.createIndex({a: 1}, {unique: true}); +coll.ensureIndex({a: 1}, {unique: true}); request = { update: coll.getName(), updates: [ diff --git a/jstests/core/batch_write_command_w0.js b/jstests/core/batch_write_command_w0.js index ca2522bbe01..01b9cb5f165 100644 --- a/jstests/core/batch_write_command_w0.js +++ b/jstests/core/batch_write_command_w0.js @@ -76,7 +76,7 @@ countEventually(coll, 2); // // Upsert fail due to duplicate key index, w:0, ordered:true coll.drop(); -coll.createIndex({a: 1}, {unique: true}); +coll.ensureIndex({a: 1}, {unique: true}); request = { update: coll.getName(), updates: [ diff --git a/jstests/core/bulk_api_ordered.js b/jstests/core/bulk_api_ordered.js index d3a484c2b12..2957195065d 100644 --- a/jstests/core/bulk_api_ordered.js +++ b/jstests/core/bulk_api_ordered.js @@ -80,7 +80,7 @@ var executeTests = function() { // Create unique index coll.remove({}); - coll.createIndex({a: 1}, {unique: true}); + coll.ensureIndex({a: 1}, {unique: true}); /** * Single error ordered bulk operation @@ -118,7 +118,7 @@ var executeTests = function() { // Create unique index coll.dropIndexes(); coll.remove({}); - coll.createIndex({a: 1}, {unique: true}); + coll.ensureIndex({a: 1}, {unique: true}); /** * Multiple error ordered bulk operation @@ -152,7 +152,7 @@ var executeTests = function() { // Create unique index coll.dropIndexes(); coll.remove({}); - coll.createIndex({a: 1}, {unique: true}); + coll.ensureIndex({a: 1}, {unique: true}); }; var buildVersion = parseInt(db.runCommand({buildInfo: 1}).versionArray.slice(0, 3).join(""), 10); diff --git a/jstests/core/bulk_api_unordered.js b/jstests/core/bulk_api_unordered.js index 04e002306e5..6db2a607a25 100644 --- a/jstests/core/bulk_api_unordered.js +++ b/jstests/core/bulk_api_unordered.js @@ -85,7 +85,7 @@ var executeTests = function() { // Create unique index coll.remove({}); - coll.createIndex({a: 1}, {unique: true}); + coll.ensureIndex({a: 1}, {unique: true}); /** * Single error unordered bulk operation @@ -118,7 +118,7 @@ var executeTests = function() { // Create unique index coll.dropIndexes(); coll.remove({}); - coll.createIndex({a: 1}, {unique: true}); + coll.ensureIndex({a: 1}, {unique: true}); /** * Multiple error unordered bulk operation @@ -168,7 +168,7 @@ var executeTests = function() { // Create unique index coll.dropIndexes(); coll.remove({}); - coll.createIndex({a: 1}, {unique: true}); + coll.ensureIndex({a: 1}, {unique: true}); }; var buildVersion = parseInt(db.runCommand({buildInfo: 1}).versionArray.slice(0, 3).join(""), 10); diff --git a/jstests/core/capped5.js b/jstests/core/capped5.js index 163aa684fbe..0efb957ae6c 100644 --- a/jstests/core/capped5.js +++ b/jstests/core/capped5.js @@ -9,8 +9,8 @@ t.insert({_id: 5, x: 11, z: 52}); assert.eq(1, t.getIndexKeys().length, "A0"); // now we assume _id index even on capped coll assert.eq(52, t.findOne({x: 11}).z, "A1"); -t.createIndex({_id: 1}); -t.createIndex({x: 1}); +t.ensureIndex({_id: 1}); +t.ensureIndex({x: 1}); assert.eq(52, t.findOne({x: 11}).z, "B1"); assert.eq(52, t.findOne({_id: 5}).z, "B2"); @@ -26,14 +26,14 @@ t.drop(); db.createCollection(tn, {capped: true, size: 1024 * 1024 * 1}); t.insert({_id: 5, x: 11}); t.insert({_id: 6, x: 12}); -t.createIndex({x: 1}, {unique: true}); +t.ensureIndex({x: 1}, {unique: true}); assert.eq(2, t.getIndexes().length); // now we assume _id index assert.eq(2, t.find().hint({x: 1}).toArray().length); // SERVER-525 (closed) unique indexes in capped collection t.drop(); db.createCollection(tn, {capped: true, size: 1024 * 1024 * 1}); -t.createIndex({_id: 1}); // note we assume will be automatically unique because it is _id +t.ensureIndex({_id: 1}); // note we assume will be automatically unique because it is _id t.insert({_id: 5, x: 11}); t.insert({_id: 5, x: 12}); assert.eq(1, t.find().toArray().length); diff --git a/jstests/core/capped_empty.js b/jstests/core/capped_empty.js index 93657b4a67f..99e08f217ed 100644 --- a/jstests/core/capped_empty.js +++ b/jstests/core/capped_empty.js @@ -14,7 +14,7 @@ db.createCollection(t.getName(), {capped: true, size: 100}); t.insert({x: 1}); t.insert({x: 2}); t.insert({x: 3}); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq(3, t.count()); diff --git a/jstests/core/cappeda.js b/jstests/core/cappeda.js index 1061ba0a1d6..f506d5416b1 100644 --- a/jstests/core/cappeda.js +++ b/jstests/core/cappeda.js @@ -22,7 +22,7 @@ function u() { // assert.throws( q , [] , "A1" ); // assert.throws( u , [] , "B1" ); -t.createIndex({_id: 1}); +t.ensureIndex({_id: 1}); assert.eq(1, q().x); q(); diff --git a/jstests/core/check_shard_index.js b/jstests/core/check_shard_index.js index e64beee77f8..f187a6210d0 100644 --- a/jstests/core/check_shard_index.js +++ b/jstests/core/check_shard_index.js @@ -16,7 +16,7 @@ f.drop(); // f.drop(); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); assert.eq(0, f.count(), "1. initial count should be zero"); res = db.runCommand({checkShardingIndex: "test.jstests_shardingindex", keyPattern: {x: 1, y: 1}}); @@ -32,7 +32,7 @@ assert.eq(true, res.ok, "1b"); // f.drop(); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); assert.eq(0, f.count(), "2. initial count should be zero"); f.save({x: 1, y: 1}); @@ -56,7 +56,7 @@ assert(res.idskip, "2d " + tojson(res)); // f.drop(); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); assert.eq(0, f.count(), "3. initial count should be zero"); f.save({x: 1, y: 1}); @@ -68,7 +68,7 @@ assert.eq(false, res.ok, "3a " + tojson(res)); f.remove({y: 2}); f.dropIndex({x: 1, y: 1}); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); assert.eq(1, f.count(), "3. count after removing array value should be 1"); res = db.runCommand({checkShardingIndex: "test.jstests_shardingindex", keyPattern: {x: 1, y: 1}}); @@ -85,7 +85,7 @@ assert.eq(false, res.ok, "3c " + tojson(res)); // f.drop(); -f.createIndex({x: 1, y: 1, z: 1}); +f.ensureIndex({x: 1, y: 1, z: 1}); assert.eq(0, f.count(), "4. initial count should be zero"); f.save({x: 1, y: 1, z: 1}); @@ -110,7 +110,7 @@ assert.eq(false, res.ok, "4e " + tojson(res)); f.remove({y: 2}); f.dropIndex({x: 1, y: 1, z: 1}); -f.createIndex({x: 1, y: 1, z: 1}); +f.ensureIndex({x: 1, y: 1, z: 1}); assert.eq(1, f.count(), "4. count after removing array value should be 1"); res = db.runCommand( @@ -131,7 +131,7 @@ assert.eq(false, res.ok, "4i " + tojson(res)); f.remove({x: 3}); // Necessary so that the index is no longer marked as multikey f.dropIndex({x: 1, y: 1, z: 1}); -f.createIndex({x: 1, y: 1, z: 1}); +f.ensureIndex({x: 1, y: 1, z: 1}); assert.eq(1, f.count(), "4. count after removing array value should be 1 again"); res = db.runCommand( diff --git a/jstests/core/collation.js b/jstests/core/collation.js index 44e8092f75e..5cfedcc8e1f 100644 --- a/jstests/core/collation.js +++ b/jstests/core/collation.js @@ -99,7 +99,7 @@ assert.eq(collectionInfos[0].options.collation, { }); // Ensure that an index with no collation inherits the collection-default collation. -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); assertIndexHasCollation({a: 1}, { locale: "fr_CA", caseLevel: false, @@ -115,7 +115,7 @@ assertIndexHasCollation({a: 1}, { // Ensure that an index which specifies an overriding collation does not use the collection // default. -assert.commandWorked(coll.createIndex({b: 1}, {collation: {locale: "en_US"}})); +assert.commandWorked(coll.ensureIndex({b: 1}, {collation: {locale: "en_US"}})); assertIndexHasCollation({b: 1}, { locale: "en_US", caseLevel: false, @@ -131,11 +131,11 @@ assertIndexHasCollation({b: 1}, { // Ensure that an index which specifies the "simple" collation as an overriding collation still // does not use the collection default. -assert.commandWorked(coll.createIndex({d: 1}, {collation: {locale: "simple"}})); +assert.commandWorked(coll.ensureIndex({d: 1}, {collation: {locale: "simple"}})); assertIndexHasCollation({d: 1}, {locale: "simple"}); // Ensure that a v=1 index doesn't inherit the collection-default collation. -assert.commandWorked(coll.createIndex({c: 1}, {v: 1})); +assert.commandWorked(coll.ensureIndex({c: 1}, {v: 1})); assertIndexHasCollation({c: 1}, {locale: "simple"}); // Test that all indexes retain their current collation when the collection is re-indexed. (Only @@ -177,20 +177,20 @@ coll.drop(); // // Attempting to build an index with an invalid collation should fail. -assert.commandFailed(coll.createIndex({a: 1}, {collation: "not an object"})); -assert.commandFailed(coll.createIndex({a: 1}, {collation: {}})); -assert.commandFailed(coll.createIndex({a: 1}, {collation: {blah: 1}})); -assert.commandFailed(coll.createIndex({a: 1}, {collation: {locale: "en", blah: 1}})); -assert.commandFailed(coll.createIndex({a: 1}, {collation: {locale: "xx"}})); -assert.commandFailed(coll.createIndex({a: 1}, {collation: {locale: "en", strength: 99}})); +assert.commandFailed(coll.ensureIndex({a: 1}, {collation: "not an object"})); +assert.commandFailed(coll.ensureIndex({a: 1}, {collation: {}})); +assert.commandFailed(coll.ensureIndex({a: 1}, {collation: {blah: 1}})); +assert.commandFailed(coll.ensureIndex({a: 1}, {collation: {locale: "en", blah: 1}})); +assert.commandFailed(coll.ensureIndex({a: 1}, {collation: {locale: "xx"}})); +assert.commandFailed(coll.ensureIndex({a: 1}, {collation: {locale: "en", strength: 99}})); // Attempting to create an index whose collation version does not match the collator version // produced by ICU should result in failure with a special error code. assert.commandFailedWithCode( - coll.createIndex({a: 1}, {collation: {locale: "en", version: "unknownVersion"}}), + coll.ensureIndex({a: 1}, {collation: {locale: "en", version: "unknownVersion"}}), ErrorCodes.IncompatibleCollationVersion); -assert.commandWorked(coll.createIndex({a: 1}, {collation: {locale: "en_US"}})); +assert.commandWorked(coll.ensureIndex({a: 1}, {collation: {locale: "en_US"}})); assertIndexHasCollation({a: 1}, { locale: "en_US", caseLevel: false, @@ -335,7 +335,7 @@ assert.eq(0, coll.aggregate([{$match: {str: "FOO"}}], {collation: {locale: "simp // default collation. coll.drop(); assert.commandWorked(db.createCollection(coll.getName(), {collation: {locale: "en_US"}})); -assert.commandWorked(coll.createIndex({a: 1}, {collation: {locale: "en_US"}})); +assert.commandWorked(coll.ensureIndex({a: 1}, {collation: {locale: "en_US"}})); var explain = coll.explain("queryPlanner").aggregate([{$match: {a: "foo"}}]); assert(isIxscan(db, explain.queryPlanner.winningPlan)); @@ -343,7 +343,7 @@ assert(isIxscan(db, explain.queryPlanner.winningPlan)); // collation is incompatible with index collation. coll.drop(); assert.commandWorked(db.createCollection(coll.getName(), {collation: {locale: "en_US"}})); -assert.commandWorked(coll.createIndex({a: 1}, {collation: {locale: "simple"}})); +assert.commandWorked(coll.ensureIndex({a: 1}, {collation: {locale: "simple"}})); var explain = coll.explain("queryPlanner").aggregate([{$match: {a: "foo"}}]); assert(isCollscan(db, explain.queryPlanner.winningPlan)); @@ -505,7 +505,7 @@ assert.eq(1, coll.distinct("_id", {str: "foo"}, {collation: {locale: "simple"}}) // default collation. coll.drop(); assert.commandWorked(db.createCollection(coll.getName(), {collation: {locale: "en_US"}})); -assert.commandWorked(coll.createIndex({a: 1}, {collation: {locale: "en_US"}})); +assert.commandWorked(coll.ensureIndex({a: 1}, {collation: {locale: "en_US"}})); var explain = coll.explain("queryPlanner").distinct("a"); assert(planHasStage(db, explain.queryPlanner.winningPlan, "DISTINCT_SCAN")); assert(planHasStage(db, explain.queryPlanner.winningPlan, "FETCH")); @@ -534,7 +534,7 @@ assert(!planHasStage(db, explain.queryPlanner.winningPlan, "FETCH")); // incompatible with index collation. coll.drop(); assert.commandWorked(db.createCollection(coll.getName(), {collation: {locale: "en_US"}})); -assert.commandWorked(coll.createIndex({a: 1}, {collation: {locale: "simple"}})); +assert.commandWorked(coll.ensureIndex({a: 1}, {collation: {locale: "simple"}})); var explain = coll.explain("queryPlanner").distinct("a"); assert(isCollscan(db, explain.queryPlanner.winningPlan)); @@ -608,7 +608,7 @@ if (db.getMongo().useReadCommands()) { coll.find({str: {$ne: "FOO"}}).collation({locale: "en_US", strength: 2}).itcount()); // Find should return correct results when collation specified and compatible index exists. - assert.commandWorked(coll.createIndex({str: 1}, {collation: {locale: "en_US", strength: 2}})); + assert.commandWorked(coll.ensureIndex({str: 1}, {collation: {locale: "en_US", strength: 2}})); assert.eq(0, coll.find({str: "FOO"}).hint({str: 1}).itcount()); assert.eq(0, coll.find({str: "FOO"}).collation({locale: "en_US"}).hint({str: 1}).itcount()); assert.eq( @@ -623,7 +623,7 @@ if (db.getMongo().useReadCommands()) { // Find should return correct results when collation specified and compatible partial index // exists. - assert.commandWorked(coll.createIndex({str: 1}, { + assert.commandWorked(coll.ensureIndex({str: 1}, { partialFilterExpression: {str: {$lte: "FOO"}}, collation: {locale: "en_US", strength: 2} })); @@ -644,7 +644,7 @@ if (db.getMongo().useReadCommands()) { // Ensure results from an index that doesn't match the query collation are sorted to match // the requested collation. - assert.commandWorked(coll.createIndex({a: 1})); + assert.commandWorked(coll.ensureIndex({a: 1})); var res = coll.find({a: {'$exists': true}}, {_id: 0}).collation({locale: "en_US", strength: 3}).sort({ a: 1 @@ -746,7 +746,7 @@ if (db.getMongo().useReadCommands()) { // collation. coll.drop(); assert.commandWorked(db.createCollection(coll.getName(), {collation: {locale: "en_US"}})); -assert.commandWorked(coll.createIndex({a: 1}, {collation: {locale: "en_US"}})); +assert.commandWorked(coll.ensureIndex({a: 1}, {collation: {locale: "en_US"}})); var explain = coll.find({a: "foo"}).explain("queryPlanner"); assert(isIxscan(db, explain.queryPlanner.winningPlan)); @@ -754,7 +754,7 @@ assert(isIxscan(db, explain.queryPlanner.winningPlan)); // collation is "simple". coll.drop(); assert.commandWorked(db.createCollection(coll.getName(), {collation: {locale: "simple"}})); -assert.commandWorked(coll.createIndex({a: 1}, {collation: {locale: "simple"}})); +assert.commandWorked(coll.ensureIndex({a: 1}, {collation: {locale: "simple"}})); var explain = coll.find({a: "foo"}).explain("queryPlanner"); assert(isIxscan(db, explain.queryPlanner.winningPlan)); @@ -762,7 +762,7 @@ assert(isIxscan(db, explain.queryPlanner.winningPlan)); // collection has a non-"simple" default collation. coll.drop(); assert.commandWorked(db.createCollection(coll.getName(), {collation: {locale: "en_US"}})); -assert.commandWorked(coll.createIndex({a: 1}, {collation: {locale: "simple"}})); +assert.commandWorked(coll.ensureIndex({a: 1}, {collation: {locale: "simple"}})); var explain = coll.find({a: "foo"}).explain("queryPlanner"); assert(isCollscan(db, explain.queryPlanner.winningPlan)); @@ -770,7 +770,7 @@ assert(isCollscan(db, explain.queryPlanner.winningPlan)); // non-"simple" default collation. coll.drop(); assert.commandWorked(db.createCollection(coll.getName(), {collation: {locale: "en_US"}})); -assert.commandWorked(coll.createIndex({a: 1}, {collation: {locale: "simple"}})); +assert.commandWorked(coll.ensureIndex({a: 1}, {collation: {locale: "simple"}})); var explain = coll.find({a: "foo"}).collation({locale: "simple"}).explain("queryPlanner"); assert(isIxscan(db, explain.queryPlanner.winningPlan)); @@ -1314,14 +1314,14 @@ const geoNearStage = { // $geoNear should return correct results when collation specified and string predicate not // indexed. -assert.commandWorked(coll.createIndex({geo: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"})); assert.eq(0, coll.aggregate([geoNearStage]).itcount()); assert.eq(1, coll.aggregate([geoNearStage], {collation: {locale: "en_US", strength: 2}}).itcount()); // $geoNear should return correct results when no collation specified and string predicate // indexed. assert.commandWorked(coll.dropIndexes()); -assert.commandWorked(coll.createIndex({geo: "2dsphere", str: 1})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere", str: 1})); assert.eq(0, coll.aggregate([geoNearStage]).itcount()); assert.eq(1, coll.aggregate([geoNearStage], {collation: {locale: "en_US", strength: 2}}).itcount()); @@ -1329,7 +1329,7 @@ assert.eq(1, coll.aggregate([geoNearStage], {collation: {locale: "en_US", streng // incompatible with string predicate. assert.commandWorked(coll.dropIndexes()); assert.commandWorked( - coll.createIndex({geo: "2dsphere", str: 1}, {collation: {locale: "en_US", strength: 3}})); + coll.ensureIndex({geo: "2dsphere", str: 1}, {collation: {locale: "en_US", strength: 3}})); assert.eq(0, coll.aggregate([geoNearStage]).itcount()); assert.eq(1, coll.aggregate([geoNearStage], {collation: {locale: "en_US", strength: 2}}).itcount()); @@ -1337,7 +1337,7 @@ assert.eq(1, coll.aggregate([geoNearStage], {collation: {locale: "en_US", streng // compatible with string predicate. assert.commandWorked(coll.dropIndexes()); assert.commandWorked( - coll.createIndex({geo: "2dsphere", str: 1}, {collation: {locale: "en_US", strength: 2}})); + coll.ensureIndex({geo: "2dsphere", str: 1}, {collation: {locale: "en_US", strength: 2}})); assert.eq(0, coll.aggregate([geoNearStage]).itcount()); assert.eq(1, coll.aggregate([geoNearStage], {collation: {locale: "en_US", strength: 2}}).itcount()); @@ -1346,7 +1346,7 @@ assert.eq(1, coll.aggregate([geoNearStage], {collation: {locale: "en_US", streng coll.drop(); assert.commandWorked( db.createCollection(coll.getName(), {collation: {locale: "en_US", strength: 2}})); -assert.commandWorked(coll.createIndex({geo: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"})); assert.commandWorked(coll.insert({geo: {type: "Point", coordinates: [0, 0]}, str: "abc"})); assert.eq(1, coll.aggregate([geoNearStage]).itcount()); @@ -1355,7 +1355,7 @@ assert.eq(1, coll.aggregate([geoNearStage]).itcount()); coll.drop(); assert.commandWorked( db.createCollection(coll.getName(), {collation: {locale: "en_US", strength: 2}})); -assert.commandWorked(coll.createIndex({geo: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"})); assert.commandWorked(coll.insert({geo: {type: "Point", coordinates: [0, 0]}, str: "abc"})); assert.eq(0, coll.aggregate([geoNearStage], {collation: {locale: "simple"}}).itcount()); @@ -1378,7 +1378,7 @@ if (db.getMongo().useReadCommands()) { // predicate not indexed. coll.drop(); assert.commandWorked(coll.insert({geo: {type: "Point", coordinates: [0, 0]}, str: "abc"})); - assert.commandWorked(coll.createIndex({geo: "2dsphere"})); + assert.commandWorked(coll.ensureIndex({geo: "2dsphere"})); assert.eq( 0, coll.find( @@ -1394,7 +1394,7 @@ if (db.getMongo().useReadCommands()) { // Find with $nearSphere should return correct results when no collation specified and // string predicate indexed. assert.commandWorked(coll.dropIndexes()); - assert.commandWorked(coll.createIndex({geo: "2dsphere", str: 1})); + assert.commandWorked(coll.ensureIndex({geo: "2dsphere", str: 1})); assert.eq( 0, coll.find( @@ -1411,7 +1411,7 @@ if (db.getMongo().useReadCommands()) { // collation on index is incompatible with string predicate. assert.commandWorked(coll.dropIndexes()); assert.commandWorked( - coll.createIndex({geo: "2dsphere", str: 1}, {collation: {locale: "en_US", strength: 3}})); + coll.ensureIndex({geo: "2dsphere", str: 1}, {collation: {locale: "en_US", strength: 3}})); assert.eq( 0, coll.find( @@ -1428,7 +1428,7 @@ if (db.getMongo().useReadCommands()) { // collation on index is compatible with string predicate. assert.commandWorked(coll.dropIndexes()); assert.commandWorked( - coll.createIndex({geo: "2dsphere", str: 1}, {collation: {locale: "en_US", strength: 2}})); + coll.ensureIndex({geo: "2dsphere", str: 1}, {collation: {locale: "en_US", strength: 2}})); assert.eq( 0, coll.find( @@ -1886,7 +1886,7 @@ if (db.getMongo().useReadCommands()) { // Ensure results from index with min/max query are sorted to match requested collation. coll.drop(); - assert.commandWorked(coll.createIndex({a: 1, b: 1})); + assert.commandWorked(coll.ensureIndex({a: 1, b: 1})); assert.commandWorked( coll.insert([{a: 1, b: 1}, {a: 1, b: 2}, {a: 1, b: "A"}, {a: 1, b: "a"}, {a: 2, b: 2}])); var expected = [{a: 1, b: 1}, {a: 1, b: 2}, {a: 1, b: "a"}, {a: 1, b: "A"}, {a: 2, b: 2}]; diff --git a/jstests/core/collmod.js b/jstests/core/collmod.js index 2f71b39c485..c70a806c2d7 100644 --- a/jstests/core/collmod.js +++ b/jstests/core/collmod.js @@ -53,7 +53,7 @@ function findCollectionInfo() { assert.commandFailed(t.runCommand('collmod', {NotARealOption: 1})); // add a TTL index -t.createIndex({a: 1}, {"name": "index1", "expireAfterSeconds": 50}); +t.ensureIndex({a: 1}, {"name": "index1", "expireAfterSeconds": 50}); assert(findTTL({a: 1}, 50), "TTL index not added"); // try to modify it with a bad key pattern @@ -98,7 +98,7 @@ assert.commandFailed(db.runCommand({ // try to modify a faulty TTL index with a non-numeric expireAfterSeconds field t.dropIndex({a: 1}); -t.createIndex({a: 1}, {"expireAfterSeconds": "50"}); +t.ensureIndex({a: 1}, {"expireAfterSeconds": "50"}); var res = db.runCommand({"collMod": coll, "index": {"keyPattern": {a: 1}, "expireAfterSeconds": 100}}); debug(res); @@ -106,7 +106,7 @@ assert.eq(0, res.ok, "shouldn't be able to modify faulty index spec"); // try with new index, this time set expireAfterSeconds t.dropIndex({a: 1}); -t.createIndex({a: 1}, {"expireAfterSeconds": 50}); +t.ensureIndex({a: 1}, {"expireAfterSeconds": 50}); var res = db.runCommand({"collMod": coll, "index": {"keyPattern": {a: 1}, "expireAfterSeconds": 100}}); debug(res); diff --git a/jstests/core/compact_keeps_indexes.js b/jstests/core/compact_keeps_indexes.js index f4f59165272..4371513b3d9 100644 --- a/jstests/core/compact_keeps_indexes.js +++ b/jstests/core/compact_keeps_indexes.js @@ -15,7 +15,7 @@ var coll = db.compact_keeps_indexes; coll.drop(); coll.insert({_id: 1, x: 1}); -coll.createIndex({x: 1}); +coll.ensureIndex({x: 1}); assert.eq(coll.getIndexes().length, 2); diff --git a/jstests/core/count.js b/jstests/core/count.js index c34f8721cef..523b0743c3f 100644 --- a/jstests/core/count.js +++ b/jstests/core/count.js @@ -17,13 +17,13 @@ assert.eq(2, coll.count()); coll.drop(); assert.commandWorked(coll.insert({a: true, b: false})); -assert.commandWorked(coll.createIndex({b: 1, a: 1})); +assert.commandWorked(coll.ensureIndex({b: 1, a: 1})); assert.eq(1, coll.find({a: true, b: false}).count()); assert.eq(1, coll.find({b: false, a: true}).count()); coll.drop(); assert.commandWorked(coll.insert({a: true, b: false})); -assert.commandWorked(coll.createIndex({b: 1, a: 1, c: 1})); +assert.commandWorked(coll.ensureIndex({b: 1, a: 1, c: 1})); assert.eq(1, coll.find({a: true, b: false}).count()); assert.eq(1, coll.find({b: false, a: true}).count()); diff --git a/jstests/core/count4.js b/jstests/core/count4.js index 2bb35190bd8..ac0b3d3491f 100644 --- a/jstests/core/count4.js +++ b/jstests/core/count4.js @@ -13,7 +13,7 @@ q = { assert.eq(50, t.find(q).count(), "A"); assert.eq(50, t.find(q).itcount(), "B"); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq(50, t.find(q).count(), "C"); assert.eq(50, t.find(q).itcount(), "D"); diff --git a/jstests/core/count5.js b/jstests/core/count5.js index ceedf62b336..b89eb88d494 100644 --- a/jstests/core/count5.js +++ b/jstests/core/count5.js @@ -14,7 +14,7 @@ q = { assert.eq(50, t.find(q).count(), "A"); assert.eq(50, t.find(q).itcount(), "B"); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq(50, t.find(q).count(), "C"); assert.eq(50, t.find(q).itcount(), "D"); diff --git a/jstests/core/count6.js b/jstests/core/count6.js index 78735c89c26..46fb428ef97 100644 --- a/jstests/core/count6.js +++ b/jstests/core/count6.js @@ -6,7 +6,7 @@ t = db.jstests_count6; function checkCountForObject(obj) { t.drop(); - t.createIndex({b: 1, a: 1}); + t.ensureIndex({b: 1, a: 1}); function checkCounts(query, expected) { assert.eq(expected, t.count(query), "A1"); diff --git a/jstests/core/count7.js b/jstests/core/count7.js index 443134474a8..95417e241de 100644 --- a/jstests/core/count7.js +++ b/jstests/core/count7.js @@ -5,7 +5,7 @@ t = db.jstests_count7; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: 'algebra'}); t.save({a: 'apple'}); t.save({a: 'azores'}); diff --git a/jstests/core/count9.js b/jstests/core/count9.js index 062f099e513..517322a9310 100644 --- a/jstests/core/count9.js +++ b/jstests/core/count9.js @@ -3,7 +3,7 @@ t = db.jstests_count9; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: ['a', 'b', 'a']}); assert.eq(1, t.count({a: 'a'})); @@ -12,7 +12,7 @@ t.save({a: ['a', 'b', 'a']}); assert.eq(2, t.count({a: 'a'})); t.drop(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); t.save({a: ['a', 'b', 'a'], b: 'r'}); assert.eq(1, t.count({a: 'a', b: 'r'})); @@ -23,6 +23,6 @@ assert.eq(2, t.count({a: 'a', b: 'r'})); assert.eq(2, t.count({a: 'a'})); t.drop(); -t.createIndex({'a.b': 1, 'a.c': 1}); +t.ensureIndex({'a.b': 1, 'a.c': 1}); t.save({a: [{b: 'b', c: 'c'}, {b: 'b', c: 'c'}]}); assert.eq(1, t.count({'a.b': 'b', 'a.c': 'c'})); diff --git a/jstests/core/count_hint.js b/jstests/core/count_hint.js index 5ba9514de87..21c7a37b87d 100644 --- a/jstests/core/count_hint.js +++ b/jstests/core/count_hint.js @@ -18,7 +18,7 @@ assert.commandWorked(coll.insert({i: 2})); assert.eq(2, coll.find().count()); -assert.commandWorked(coll.createIndex({i: 1})); +assert.commandWorked(coll.ensureIndex({i: 1})); assert.eq(2, coll.find().hint("i_1").count()); assert.eq(2, coll.find().hint({i: 1}).count()); @@ -30,7 +30,7 @@ assert.eq(2, coll.find().hint("_id_").count()); assert.eq(2, coll.find().hint({_id: 1}).count()); // Create a sparse index which should have no entries. -assert.commandWorked(coll.createIndex({x: 1}, {sparse: true})); +assert.commandWorked(coll.ensureIndex({x: 1}, {sparse: true})); // A hint should be respected, even if it results in the wrong answer. assert.eq(0, coll.find().hint("x_1").count()); diff --git a/jstests/core/countb.js b/jstests/core/countb.js index 869825b25a1..bd6f9507fd2 100644 --- a/jstests/core/countb.js +++ b/jstests/core/countb.js @@ -7,7 +7,7 @@ t = db.jstests_countb; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: ['a', 'b']}); assert.eq(0, t.find({a: {$in: ['a'], $gt: 'b'}}).count()); assert.eq(0, t.find({$and: [{a: 'a'}, {a: {$gt: 'b'}}]}).count()); diff --git a/jstests/core/countc.js b/jstests/core/countc.js index 5f0d31b769c..876129c573f 100644 --- a/jstests/core/countc.js +++ b/jstests/core/countc.js @@ -14,7 +14,7 @@ t.drop(); // Match a subset of inserted values within a $in operator. t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); // Save 'a' values 0, 0.5, 1.5, 2.5 ... 97.5, 98.5, 99. t.save({a: 0}); t.save({a: 99}); @@ -31,7 +31,7 @@ assert.eq(2, t.count({a: {$in: vals}})); // Match 'a' values within upper and lower limits. t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: [1, 2]}); // Will match because 'a' is in range. t.save({a: 9}); // Will not match because 'a' is not in range. // Only one document matches. @@ -39,14 +39,14 @@ assert.eq(1, t.count({a: {$gt: 0, $lt: 5}})); // Match two nested fields within an array. t.drop(); -t.createIndex({'a.b': 1, 'a.c': 1}); +t.ensureIndex({'a.b': 1, 'a.c': 1}); t.save({a: [{b: 2, c: 3}, {}]}); // The document does not match because its c value is 3. assert.eq(0, t.count({'a.b': 2, 'a.c': 2})); // $gt:string only matches strings. t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: 'a'}); // Will match. t.save({a: {}}); // Will not match because {} is not a string. // Only one document matches. @@ -54,7 +54,7 @@ assert.eq(1, t.count({a: {$gte: ''}})); // $lte:date only matches dates. t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: new Date(1)}); // Will match. t.save({a: true}); // Will not match because 'true' is not a date. // Only one document matches. @@ -62,14 +62,14 @@ assert.eq(1, t.count({a: {$lte: new Date(1)}})); // Querying for 'undefined' triggers an error. t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.throws(function() { t.count({a: undefined}); }); // Count using a descending order index. t.drop(); -t.createIndex({a: -1}); +t.ensureIndex({a: -1}); t.save({a: 1}); t.save({a: 2}); t.save({a: 3}); @@ -80,7 +80,7 @@ assert.eq(2, t.count({a: {$lt: 3}})); // Count using a compound index. t.drop(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); t.save({a: 1, b: 2}); t.save({a: 2, b: 1}); t.save({a: 2, b: 3}); @@ -95,7 +95,7 @@ assert.eq(1, t.count({a: 1, b: {$lt: 3}})); // Count using a compound descending order index. t.drop(); -t.createIndex({a: 1, b: -1}); +t.ensureIndex({a: 1, b: -1}); t.save({a: 1, b: 2}); t.save({a: 2, b: 1}); t.save({a: 2, b: 3}); @@ -108,13 +108,13 @@ assert.eq(1, t.count({a: 1, b: {$lt: 3}})); // Count with a multikey value. t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: [1, 2]}); assert.eq(1, t.count({a: {$gt: 0, $lte: 2}})); // Count with a match constraint on an unindexed field. t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: 1, b: 1}); t.save({a: 1, b: 2}); assert.eq(1, t.count({a: 1, $where: 'this.b == 1'})); diff --git a/jstests/core/coveredIndex2.js b/jstests/core/coveredIndex2.js index 41092e7d525..9ec3ce529ae 100644 --- a/jstests/core/coveredIndex2.js +++ b/jstests/core/coveredIndex2.js @@ -19,7 +19,7 @@ assert.eq(t.findOne({a: 1}).a, 1, "Cannot find right record"); assert.eq(t.count(), 2, "Not right length"); // use simple index -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); var plan = t.find({a: 1}).explain(); assert(!isIndexOnly(db, plan.queryPlanner.winningPlan), "Find using covered index but all fields are returned"); diff --git a/jstests/core/coveredIndex3.js b/jstests/core/coveredIndex3.js index 8b15b40e862..a054840b6df 100644 --- a/jstests/core/coveredIndex3.js +++ b/jstests/core/coveredIndex3.js @@ -30,7 +30,7 @@ if (0) { // SERVER-4975 for (i = 0; i < 30; ++i) { t.drop(); - t.createIndex({a: 1}); + t.ensureIndex({a: 1}); for (j = 0; j < 1000; ++j) { t.save({a: j}); diff --git a/jstests/core/coveredIndex4.js b/jstests/core/coveredIndex4.js index e62162d1685..125cf22da3a 100644 --- a/jstests/core/coveredIndex4.js +++ b/jstests/core/coveredIndex4.js @@ -9,8 +9,8 @@ t = db.jstests_coveredIndex4; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); orClause = []; for (i = 0; i < 200; ++i) { diff --git a/jstests/core/covered_index_compound_1.js b/jstests/core/covered_index_compound_1.js index a43a4f70ec5..2f2d45adabd 100644 --- a/jstests/core/covered_index_compound_1.js +++ b/jstests/core/covered_index_compound_1.js @@ -16,7 +16,7 @@ coll.drop(); for (i = 0; i < 100; i++) { coll.insert({a: i, b: "strvar_" + (i % 13), c: NumberInt(i % 10)}); } -coll.createIndex({a: 1, b: -1, c: 1}); +coll.ensureIndex({a: 1, b: -1, c: 1}); // Test equality - all indexed fields queried and projected var plan = coll.find({a: 10, b: "strvar_10", c: 0}, {a: 1, b: 1, c: 1, _id: 0}) diff --git a/jstests/core/covered_index_negative_1.js b/jstests/core/covered_index_negative_1.js index 06d4119ffe4..4028b1159b2 100644 --- a/jstests/core/covered_index_negative_1.js +++ b/jstests/core/covered_index_negative_1.js @@ -16,10 +16,10 @@ for (i = 0; i < 100; i++) { coll.insert( {a: i, b: "strvar_" + (i % 13), c: NumberInt(i % 10), d: i * 10, e: [i, i % 10], f: i}); } -coll.createIndex({a: 1, b: -1, c: 1}); -coll.createIndex({e: 1}); -coll.createIndex({d: 1}); -coll.createIndex({f: "hashed"}); +coll.ensureIndex({a: 1, b: -1, c: 1}); +coll.ensureIndex({e: 1}); +coll.ensureIndex({d: 1}); +coll.ensureIndex({f: "hashed"}); // Test no projection var plan = diff --git a/jstests/core/covered_index_simple_1.js b/jstests/core/covered_index_simple_1.js index ce8f1978a89..c49e5a2bc8e 100644 --- a/jstests/core/covered_index_simple_1.js +++ b/jstests/core/covered_index_simple_1.js @@ -25,7 +25,7 @@ for (i = 0; i < 5; i++) { coll.insert({foo: "string"}); coll.insert({foo: {bar: 1}}); coll.insert({foo: null}); -coll.createIndex({foo: 1}); +coll.ensureIndex({foo: 1}); // Test equality with int value var plan = coll.find({foo: 1}, {foo: 1, _id: 0}).hint({foo: 1}).explain("executionStats"); diff --git a/jstests/core/covered_index_simple_2.js b/jstests/core/covered_index_simple_2.js index 066bf1bae4c..67548ed8c06 100644 --- a/jstests/core/covered_index_simple_2.js +++ b/jstests/core/covered_index_simple_2.js @@ -19,7 +19,7 @@ for (i = 0; i < 10; i++) { coll.insert({foo: "string"}); coll.insert({foo: {bar: 1}}); coll.insert({foo: null}); -coll.createIndex({foo: 1}, {unique: true}); +coll.ensureIndex({foo: 1}, {unique: true}); // Test equality with int value var plan = coll.find({foo: 1}, {foo: 1, _id: 0}).hint({foo: 1}).explain("executionStats"); diff --git a/jstests/core/covered_index_simple_3.js b/jstests/core/covered_index_simple_3.js index c0e62a9243d..5e654475252 100644 --- a/jstests/core/covered_index_simple_3.js +++ b/jstests/core/covered_index_simple_3.js @@ -22,7 +22,7 @@ for (i = 0; i < 5; i++) { coll.insert({foo: "string"}); coll.insert({foo: {bar: 1}}); coll.insert({foo: null}); -coll.createIndex({foo: 1}, {sparse: true, unique: true}); +coll.ensureIndex({foo: 1}, {sparse: true, unique: true}); // Test equality with int value var plan = coll.find({foo: 1}, {foo: 1, _id: 0}).hint({foo: 1}).explain("executionStats"); @@ -85,7 +85,7 @@ assert.eq(0, // Check that $nin can be covered. coll.dropIndexes(); -coll.createIndex({bar: 1}); +coll.ensureIndex({bar: 1}); var plan = coll.find({bar: {$nin: [5, 8]}}, {bar: 1, _id: 0}).hint({bar: 1}).explain("executionStats"); assert(isIndexOnly(db, plan.queryPlanner.winningPlan), diff --git a/jstests/core/covered_index_sort_1.js b/jstests/core/covered_index_sort_1.js index 526ddfbaa42..4b8cea2e825 100644 --- a/jstests/core/covered_index_sort_1.js +++ b/jstests/core/covered_index_sort_1.js @@ -25,7 +25,7 @@ for (i = 0; i < 5; i++) { coll.insert({foo: "1"}); coll.insert({foo: {bar: 1}}); coll.insert({foo: null}); -coll.createIndex({foo: 1}); +coll.ensureIndex({foo: 1}); // Test no query and sort ascending var plan = coll.find({}, {foo: 1, _id: 0}).sort({foo: 1}).hint({foo: 1}).explain("executionStats"); diff --git a/jstests/core/covered_index_sort_3.js b/jstests/core/covered_index_sort_3.js index 0e9b1ea30ff..1107e0584dc 100644 --- a/jstests/core/covered_index_sort_3.js +++ b/jstests/core/covered_index_sort_3.js @@ -17,7 +17,7 @@ for (i = 0; i < 100; i++) { coll.insert({a: i, b: "strvar_" + (i % 13), c: NumberInt(i % 10)}); } -coll.createIndex({a: 1, b: -1, c: 1}); +coll.ensureIndex({a: 1, b: -1, c: 1}); // Test no query, sort on all fields in index order var plan = coll.find({}, {b: 1, c: 1, _id: 0}) diff --git a/jstests/core/create_index_helper_validation.js b/jstests/core/create_index_helper_validation.js index 1b11a50c6ca..805c567316d 100644 --- a/jstests/core/create_index_helper_validation.js +++ b/jstests/core/create_index_helper_validation.js @@ -20,7 +20,7 @@ assert.throws(() => coll.createIndex( {background: true}, {unique: true})); -assert.throws(() => coll.createIndex( +assert.throws(() => coll.ensureIndex( /* keys */ {a: 1}, /* options */ {}, /* commitQuorum */ "majority", diff --git a/jstests/core/crud_api.js b/jstests/core/crud_api.js index 9eb09ab6436..4b37300e9b1 100644 --- a/jstests/core/crud_api.js +++ b/jstests/core/crud_api.js @@ -700,7 +700,7 @@ var crudAPISpecTests = function crudAPISpecTests() { // Drop collection coll.drop(); - coll.createIndex({a: 1}, {unique: true}); + coll.ensureIndex({a: 1}, {unique: true}); // Should throw duplicate key error assert.throws(function() { diff --git a/jstests/core/cursor3.js b/jstests/core/cursor3.js index f416ec47931..1a7e0dfcc7e 100644 --- a/jstests/core/cursor3.js +++ b/jstests/core/cursor3.js @@ -23,7 +23,7 @@ t.save({a: 0}); t.save({a: 1}); t.save({a: 2}); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); checkResults([1], t.find({a: 1}).sort({a: 1}).hint({a: 1}), testNum++); checkResults([1], t.find({a: 1}).sort({a: -1}).hint({a: 1}), testNum++); diff --git a/jstests/core/cursor4.js b/jstests/core/cursor4.js index d0440d329f1..dd7875d0836 100644 --- a/jstests/core/cursor4.js +++ b/jstests/core/cursor4.js @@ -15,7 +15,7 @@ function testConstrainedFindMultiFieldSorting(db) { entries = [{a: 0, b: 0}, {a: 0, b: 1}, {a: 1, b: 1}, {a: 1, b: 1}, {a: 2, b: 0}]; for (i = 0; i < entries.length; ++i) r.save(entries[i]); - r.createIndex({a: 1, b: 1}); + r.ensureIndex({a: 1, b: 1}); reverseEntries = entries.slice(); reverseEntries.reverse(); diff --git a/jstests/core/cursor5.js b/jstests/core/cursor5.js index aab03473255..0232b92e4cc 100644 --- a/jstests/core/cursor5.js +++ b/jstests/core/cursor5.js @@ -26,7 +26,7 @@ function testBoundsWithSubobjectIndexes(db) { r.save(z[i]); idx = {"a.d": 1, a: 1, e: -1}; rIdx = {"a.d": -1, a: -1, e: 1}; - r.createIndex(idx); + r.ensureIndex(idx); checkResults([z[0], z[4], z[2]], r.find({e: 4}).sort(idx).hint(idx)); checkResults([z[1], z[3]], r.find({e: {$gt: 4}, "a.b": 1}).sort(idx).hint(idx)); diff --git a/jstests/core/cursor6.js b/jstests/core/cursor6.js index 7c8daa1bfcb..d2c56c00e75 100644 --- a/jstests/core/cursor6.js +++ b/jstests/core/cursor6.js @@ -60,7 +60,7 @@ z = [{a: 1, b: 1}, {a: 1, b: 2}, {a: 2, b: 1}, {a: 2, b: 2}]; for (i = 0; i < z.length; ++i) r.save(z[i]); -r.createIndex({a: 1, b: -1}); +r.ensureIndex({a: 1, b: -1}); check(false); check(true); diff --git a/jstests/core/cursor7.js b/jstests/core/cursor7.js index 4a21c420274..7807dbe22f5 100644 --- a/jstests/core/cursor7.js +++ b/jstests/core/cursor7.js @@ -17,7 +17,7 @@ function testMultipleInequalities(db) { r.save(z[i]); idx = {a: 1, b: 1}; rIdx = {a: -1, b: -1}; - r.createIndex(idx); + r.ensureIndex(idx); checkResults([z[2], z[3]], r.find({a: {$gt: 3}}).sort(idx).hint(idx)); checkResults([z[2]], r.find({a: {$gt: 3, $lt: 7}}).sort(idx).hint(idx)); diff --git a/jstests/core/date2.js b/jstests/core/date2.js index a398058d771..15993815b14 100644 --- a/jstests/core/date2.js +++ b/jstests/core/date2.js @@ -3,7 +3,7 @@ t = db.jstests_date2; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); var obj = {a: new Timestamp(0, 1)}; // in old versions this was == to new Date(1) t.save(obj); diff --git a/jstests/core/date3.js b/jstests/core/date3.js index e3eaea620ec..80279a9559c 100644 --- a/jstests/core/date3.js +++ b/jstests/core/date3.js @@ -29,5 +29,5 @@ function test() { } test(); -t.createIndex({d: 1}); +t.ensureIndex({d: 1}); test(); diff --git a/jstests/core/distinct3.js b/jstests/core/distinct3.js index 6a67635500d..654cd8e352a 100644 --- a/jstests/core/distinct3.js +++ b/jstests/core/distinct3.js @@ -10,8 +10,8 @@ t = db.jstests_distinct3; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); var bulk = t.initializeUnorderedBulkOp(); for (i = 0; i < 50; ++i) { diff --git a/jstests/core/distinct_array1.js b/jstests/core/distinct_array1.js index cb82c25bbff..2d3a96a6af6 100644 --- a/jstests/core/distinct_array1.js +++ b/jstests/core/distinct_array1.js @@ -19,7 +19,7 @@ res = t.distinct("a.1").sort(); assert.eq("2,3,4", res.toString()); // With index. -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); res = t.distinct("a").sort(); assert.eq("1,2,3,4,5,9", res.toString()); @@ -51,7 +51,7 @@ res = t.distinct("a.1.b").sort(); assert.eq("d,e,f", res.toString()); // With index. -t.createIndex({"a.b": 1}); +t.ensureIndex({"a.b": 1}); res = t.distinct("a.b"); res.sort(); // TODO SERVER-14832 The presence of an index may change results, but only if the index is not @@ -85,7 +85,7 @@ res = t.distinct("_id.a.1").sort(); assert.eq("2,3,4", res.toString()); // With index. -t.createIndex({"_id.a": 1}); +t.ensureIndex({"_id.a": 1}); res = t.distinct("_id.a").sort(); // TODO SERVER-14832: distinct() may incorrectly return null in presence of index. assert.eq([1, 2, 3, 4, 5, 9, null], res); diff --git a/jstests/core/distinct_index2.js b/jstests/core/distinct_index2.js index 1f552102059..d1b72565102 100644 --- a/jstests/core/distinct_index2.js +++ b/jstests/core/distinct_index2.js @@ -1,8 +1,8 @@ t = db.distinct_index2; t.drop(); -t.createIndex({a: 1, b: 1}); -t.createIndex({c: 1}); +t.ensureIndex({a: 1, b: 1}); +t.ensureIndex({c: 1}); // Uniformly distributed dataset. // If we use a randomly generated dataset, we might not @@ -37,5 +37,5 @@ check("c"); // hashed index should produce same results. t.dropIndexes(); -t.createIndex({a: "hashed"}); +t.ensureIndex({a: "hashed"}); check("a"); diff --git a/jstests/core/drop.js b/jstests/core/drop.js index 769a8cd348c..ea395660a5f 100644 --- a/jstests/core/drop.js +++ b/jstests/core/drop.js @@ -12,12 +12,12 @@ assert(!res.ok, tojson(res)); assert.eq(0, coll.getIndexes().length, "A"); coll.save({}); assert.eq(1, coll.getIndexes().length, "B"); -coll.createIndex({a: 1}); +coll.ensureIndex({a: 1}); assert.eq(2, coll.getIndexes().length, "C"); assert.commandWorked(db.runCommand({drop: coll.getName()})); assert.eq(0, coll.getIndexes().length, "D"); -coll.createIndex({a: 1}); +coll.ensureIndex({a: 1}); assert.eq(2, coll.getIndexes().length, "E"); assert.commandWorked(db.runCommand({dropIndexes: coll.getName(), index: "*"}), "drop indexes A"); assert.eq(1, coll.getIndexes().length, "G"); diff --git a/jstests/core/drop_index.js b/jstests/core/drop_index.js index e808b1f7829..60dbec0e3ea 100644 --- a/jstests/core/drop_index.js +++ b/jstests/core/drop_index.js @@ -57,7 +57,7 @@ assert.commandFailedWithCode(t.dropIndex({_id: 1}), ErrorCodes.InvalidOptions); // Ensure you can recreate indexes, even if you don't use dropIndex method. // Prior to SERVER-7168, the shell used to cache names of indexes created using -// Collection.createIndex(). +// Collection.ensureIndex(). assert.commandWorked(t.createIndex({a: 1})); assertIndexes(['a_1', 'c_1', 'd_1', 'e_1'], 'recreating {a: 1}'); diff --git a/jstests/core/dropdb_race.js b/jstests/core/dropdb_race.js index 8f1356db1d6..6bcd334e7ab 100644 --- a/jstests/core/dropdb_race.js +++ b/jstests/core/dropdb_race.js @@ -25,7 +25,7 @@ for (var pass = 0; pass < 100; pass++) { } t.insert({x: 1}); t.insert({x: 3}); - t.createIndex({x: 1}); + t.ensureIndex({x: 1}); sleep(s); if (pass % 13 == 0) t.drop(); diff --git a/jstests/core/exists.js b/jstests/core/exists.js index b85d80c36a7..e0ba49fabd8 100644 --- a/jstests/core/exists.js +++ b/jstests/core/exists.js @@ -36,10 +36,10 @@ function dotest(n) { } dotest("before index"); -t.createIndex({"a": 1}); -t.createIndex({"a.b": 1}); -t.createIndex({"a.b.c": 1}); -t.createIndex({"a.b.c.d": 1}); +t.ensureIndex({"a": 1}); +t.ensureIndex({"a.b": 1}); +t.ensureIndex({"a.b.c": 1}); +t.ensureIndex({"a.b.c.d": 1}); dotest("after index"); assert.eq(1, t.find({a: {$exists: false}}).hint({a: 1}).itcount()); diff --git a/jstests/core/exists2.js b/jstests/core/exists2.js index 0764d859c3b..3b4580cd310 100644 --- a/jstests/core/exists2.js +++ b/jstests/core/exists2.js @@ -9,6 +9,6 @@ assert.eq(2, t.find({a: 1, b: 1}).itcount(), "A2"); assert.eq(1, t.find({a: 1, b: 1, c: {"$exists": true}}).itcount(), "A3"); assert.eq(1, t.find({a: 1, b: 1, c: {"$exists": false}}).itcount(), "A4"); -t.createIndex({a: 1, b: 1, c: 1}); +t.ensureIndex({a: 1, b: 1, c: 1}); assert.eq(1, t.find({a: 1, b: 1, c: {"$exists": true}}).itcount(), "B1"); assert.eq(1, t.find({a: 1, b: 1, c: {"$exists": false}}).itcount(), "B2"); diff --git a/jstests/core/exists3.js b/jstests/core/exists3.js index 510d63c3752..e4ce03437bb 100644 --- a/jstests/core/exists3.js +++ b/jstests/core/exists3.js @@ -11,7 +11,7 @@ assert.eq(1, t.find({c: {$exists: false}}).itcount()); assert.eq(1, t.find({c: {$exists: false}}).sort({c: -1}).itcount()); // now we have an index on the sort key -t.createIndex({c: -1}); +t.ensureIndex({c: -1}); assert.eq(1, t.find({c: {$exists: false}}).sort({c: -1}).itcount()); assert.eq(1, t.find({c: {$exists: false}}).itcount()); diff --git a/jstests/core/exists4.js b/jstests/core/exists4.js index a533ca53e9c..2979a60f276 100644 --- a/jstests/core/exists4.js +++ b/jstests/core/exists4.js @@ -3,7 +3,7 @@ t = db.jstests_exists4; t.drop(); -t.createIndex({date: -1, country_code: 1, user_id: 1}, {unique: 1, background: 1}); +t.ensureIndex({date: -1, country_code: 1, user_id: 1}, {unique: 1, background: 1}); t.insert({date: new Date("08/27/2010"), tot_visit: 100}); t.insert({date: new Date("08/27/2010"), country_code: "IT", tot_visit: 77}); t.insert({date: new Date("08/27/2010"), country_code: "ES", tot_visit: 23}); diff --git a/jstests/core/exists6.js b/jstests/core/exists6.js index 736574db895..67ab7e5345d 100644 --- a/jstests/core/exists6.js +++ b/jstests/core/exists6.js @@ -3,7 +3,7 @@ t = db.jstests_exists6; t.drop(); -t.createIndex({b: 1}); +t.ensureIndex({b: 1}); t.save({}); t.save({b: 1}); t.save({b: null}); @@ -14,7 +14,7 @@ assert.eq(1, t.find({b: {$exists: false}}).itcount()); assert.eq(1, t.find({b: {$not: {$exists: true}}}).itcount()); // Now check existence of second compound field. -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); t.save({a: 1}); t.save({a: 1, b: 1}); t.save({a: 1, b: null}); diff --git a/jstests/core/exists7.js b/jstests/core/exists7.js index 6ca55a42286..74ea4e9719c 100644 --- a/jstests/core/exists7.js +++ b/jstests/core/exists7.js @@ -18,5 +18,5 @@ function testIntegerExistsSpec() { } testIntegerExistsSpec(); -t.createIndex({b: 1}); +t.ensureIndex({b: 1}); testIntegerExistsSpec(); diff --git a/jstests/core/exists9.js b/jstests/core/exists9.js index 3b245cd4188..444bcf731a1 100644 --- a/jstests/core/exists9.js +++ b/jstests/core/exists9.js @@ -12,7 +12,7 @@ assert.eq(1, t.count({'a.b': {$exists: false}})); assert.eq(0, t.count({'a.b': {$exists: true}})); // With index. -t.createIndex({'a.b': 1}); +t.ensureIndex({'a.b': 1}); assert.eq(1, t.find({'a.b': {$exists: false}}).hint({'a.b': 1}).itcount()); assert.eq(0, t.find({'a.b': {$exists: true}}).hint({'a.b': 1}).itcount()); @@ -25,7 +25,7 @@ assert.eq(1, t.count({a: {$exists: true}})); assert.eq(1, t.count({a: {$exists: false}})); // With index. -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(1, t.find({a: {$exists: true}}).hint({a: 1}).itcount()); assert.eq(1, t.find({a: {$exists: false}}).hint({a: 1}).itcount()); @@ -38,6 +38,6 @@ assert.eq(1, t.count({'a.0': {$exists: true}})); assert.eq(1, t.count({'a.0': {$exists: false}})); // With index. -t.createIndex({'a.0': 1}); +t.ensureIndex({'a.0': 1}); assert.eq(1, t.find({'a.0': {$exists: true}}).hint({'a.0': 1}).itcount()); assert.eq(1, t.find({'a.0': {$exists: false}}).hint({'a.0': 1}).itcount()); diff --git a/jstests/core/existsa.js b/jstests/core/existsa.js index 2b5f70dd77f..d1079310d71 100644 --- a/jstests/core/existsa.js +++ b/jstests/core/existsa.js @@ -19,7 +19,7 @@ function setIndex(_indexKeyField) { indexKeyField = _indexKeyField; indexKeySpec = {}; indexKeySpec[indexKeyField] = 1; - coll.createIndex(indexKeySpec, {sparse: true}); + coll.ensureIndex(indexKeySpec, {sparse: true}); } setIndex('a'); @@ -106,6 +106,6 @@ assertExistsUnindexed({'a.b': {$elemMatch: {$gt: 0, $not: {$exists: false}}}}, 1 // A non sparse index will not be disallowed. coll.drop(); assert.commandWorked(coll.insert({})); -coll.createIndex({a: 1}); +coll.ensureIndex({a: 1}); assert.eq(1, coll.find({a: {$exists: false}}).itcount()); })(); diff --git a/jstests/core/existsb.js b/jstests/core/existsb.js index 64ee3cf9a88..d46266cdd16 100644 --- a/jstests/core/existsb.js +++ b/jstests/core/existsb.js @@ -57,20 +57,20 @@ function checkExistsNull() { checkExistsNull(); // try with a standard index -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); checkExistsNull(); // try with a sparse index t.dropIndexes(); -t.createIndex({a: 1}, {sparse: true}); +t.ensureIndex({a: 1}, {sparse: true}); checkExistsNull(); // try with a compound index t.dropIndexes(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); checkExistsNull(); // try with sparse compound index t.dropIndexes(); -t.createIndex({a: 1, b: 1}, {sparse: true}); +t.ensureIndex({a: 1, b: 1}, {sparse: true}); checkExistsNull(); diff --git a/jstests/core/explain1.js b/jstests/core/explain1.js index 8450335159d..09891f214dd 100644 --- a/jstests/core/explain1.js +++ b/jstests/core/explain1.js @@ -19,7 +19,7 @@ assert.eq(49, t.find(q).count(), "A"); assert.eq(49, t.find(q).itcount(), "B"); assert.eq(20, t.find(q).limit(20).itcount(), "C"); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq(49, t.find(q).count(), "D"); assert.eq(49, t.find(q).itcount(), "E"); diff --git a/jstests/core/explain4.js b/jstests/core/explain4.js index df0d98382e0..06c7bf0b359 100644 --- a/jstests/core/explain4.js +++ b/jstests/core/explain4.js @@ -6,7 +6,7 @@ t = db.jstests_explain4; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); for (i = 0; i < 10; ++i) { t.save({a: i, b: 0}); diff --git a/jstests/core/explain5.js b/jstests/core/explain5.js index 50648cd8817..5bae866e096 100644 --- a/jstests/core/explain5.js +++ b/jstests/core/explain5.js @@ -7,8 +7,8 @@ t = db.jstests_explain5; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); for (i = 0; i < 1000; ++i) { t.save({a: i, b: i % 3}); diff --git a/jstests/core/explain6.js b/jstests/core/explain6.js index f36640ce567..dbbb767531c 100644 --- a/jstests/core/explain6.js +++ b/jstests/core/explain6.js @@ -10,8 +10,8 @@ t = db.jstests_explain6; t.drop(); -t.createIndex({a: 1, b: 1}); -t.createIndex({b: 1, a: 1}); +t.ensureIndex({a: 1, b: 1}); +t.ensureIndex({b: 1, a: 1}); t.save({a: 0, b: 1}); t.save({a: 1, b: 0}); diff --git a/jstests/core/explain_count.js b/jstests/core/explain_count.js index 8dc0854ab15..883f8b84ac7 100644 --- a/jstests/core/explain_count.js +++ b/jstests/core/explain_count.js @@ -99,7 +99,7 @@ assertExplainCount({explainResults: explain, expectedCount: 0}); // Now add a bit of data to the collection. // On sharded clusters, we'll want the shard key to be indexed, so we make _id part of the index. // This means counts will not have to fetch from the document in order to get the shard key. -t.createIndex({a: 1, _id: 1}); +t.ensureIndex({a: 1, _id: 1}); for (var i = 0; i < 10; i++) { t.insert({_id: i, a: 1}); } diff --git a/jstests/core/explain_delete.js b/jstests/core/explain_delete.js index 44a67ea21ca..1863979faa5 100644 --- a/jstests/core/explain_delete.js +++ b/jstests/core/explain_delete.js @@ -43,7 +43,7 @@ explain = db.runCommand({explain: {delete: collName, deletes: [{q: {a: 1}, limit checkNWouldDelete(explain, 0); // Add an index but no data, and check that the explain still works. -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); explain = db.runCommand({explain: {delete: collName, deletes: [{q: {a: 1}, limit: 0}]}}); checkNWouldDelete(explain, 0); diff --git a/jstests/core/explain_execution_error.js b/jstests/core/explain_execution_error.js index 4515a050edc..d2240452573 100644 --- a/jstests/core/explain_execution_error.js +++ b/jstests/core/explain_execution_error.js @@ -117,8 +117,8 @@ assertExecError(result); // Now we introduce two indices. One provides the requested sort order, and // the other does not. -t.createIndex({b: 1}); -t.createIndex({c: 1}); +t.ensureIndex({b: 1}); +t.ensureIndex({c: 1}); // The query should no longer fail with a memory limit error because the planner can obtain // the sort by scanning an index. diff --git a/jstests/core/explain_find.js b/jstests/core/explain_find.js index c42d59d7671..fcf2e35053c 100644 --- a/jstests/core/explain_find.js +++ b/jstests/core/explain_find.js @@ -10,7 +10,7 @@ var collName = "jstests_explain_find"; var t = db[collName]; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); for (var i = 0; i < 10; i++) { t.insert({_id: i, a: i}); diff --git a/jstests/core/explain_large_bounds.js b/jstests/core/explain_large_bounds.js index 1ca27f9a8ef..1ff7307e7d9 100644 --- a/jstests/core/explain_large_bounds.js +++ b/jstests/core/explain_large_bounds.js @@ -8,7 +8,7 @@ const coll = db.jstests_explain_large_bounds; coll.drop(); -coll.createIndex({a: 1}); +coll.ensureIndex({a: 1}); let inClause = []; for (let i = 0; i < 1000000; i++) { diff --git a/jstests/core/explain_multi_plan.js b/jstests/core/explain_multi_plan.js index 845438af91e..dc8f153e6cb 100644 --- a/jstests/core/explain_multi_plan.js +++ b/jstests/core/explain_multi_plan.js @@ -16,8 +16,8 @@ var coll = db.explainMultiPlan; coll.drop(); // Create indices to ensure there are multiple plans available. -assert.commandWorked(coll.createIndex({a: 1, b: 1})); -assert.commandWorked(coll.createIndex({a: 1, b: -1})); +assert.commandWorked(coll.ensureIndex({a: 1, b: 1})); +assert.commandWorked(coll.ensureIndex({a: 1, b: -1})); // Insert some data to work with. var bulk = coll.initializeOrderedBulkOp(); diff --git a/jstests/core/explain_shell_helpers.js b/jstests/core/explain_shell_helpers.js index cad5fec9141..1a66a032143 100644 --- a/jstests/core/explain_shell_helpers.js +++ b/jstests/core/explain_shell_helpers.js @@ -22,7 +22,7 @@ load("jstests/libs/analyze_plan.js"); var explain; var stage; -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); for (var i = 0; i < 10; i++) { t.insert({_id: i, a: i, b: 1}); } @@ -267,7 +267,7 @@ assert(planHasStage(db, explain.queryPlanner.winningPlan, "COUNT")); assert(planHasStage(db, explain.queryPlanner.winningPlan, "COUNT_SCAN")); // Explainable count with hint. -assert.commandWorked(t.createIndex({c: 1}, {sparse: true})); +assert.commandWorked(t.ensureIndex({c: 1}, {sparse: true})); explain = t.explain().count({c: {$exists: false}}, {hint: "c_1"}); assert.commandWorked(explain); assert(planHasStage(db, explain.queryPlanner.winningPlan, "IXSCAN")); diff --git a/jstests/core/expr.js b/jstests/core/expr.js index a6861a4d2cf..1a23ac00d8b 100644 --- a/jstests/core/expr.js +++ b/jstests/core/expr.js @@ -190,7 +190,7 @@ if (db.getMongo().writeMode() === "commands") { coll.drop(); assert.commandWorked(coll.insert({geo: {type: "Point", coordinates: [0, 0]}, a: 0})); -assert.commandWorked(coll.createIndex({geo: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"})); assert.eq(1, coll.aggregate({ $geoNear: { diff --git a/jstests/core/filemd5.js b/jstests/core/filemd5.js index 064bf323bcf..b33611c1e90 100644 --- a/jstests/core/filemd5.js +++ b/jstests/core/filemd5.js @@ -17,7 +17,7 @@ assert.commandWorked(db.fs.chunks.insert({files_id: 1, n: 0, data: new BinData(0 assert.commandFailedWithCode(db.runCommand({filemd5: 1, root: "fs"}), ErrorCodes.NoQueryExecutionPlans); -db.fs.chunks.createIndex({files_id: 1, n: 1}); +db.fs.chunks.ensureIndex({files_id: 1, n: 1}); assert.commandWorked(db.runCommand({filemd5: 1, root: "fs"})); assert.commandFailedWithCode(db.runCommand({filemd5: 1, root: "fs", partialOk: 1, md5state: 5}), diff --git a/jstests/core/find6.js b/jstests/core/find6.js index 4c7a0a9384b..7edf1739c78 100644 --- a/jstests/core/find6.js +++ b/jstests/core/find6.js @@ -34,7 +34,7 @@ function f() { for (var pass = 0; pass <= 1; pass++) { f(); - q.createIndex({a: 1}); + q.ensureIndex({a: 1}); } t = db.multidim; diff --git a/jstests/core/find_and_modify_concurrent_update.js b/jstests/core/find_and_modify_concurrent_update.js index dca7c547c18..f1ac1282b49 100644 --- a/jstests/core/find_and_modify_concurrent_update.js +++ b/jstests/core/find_and_modify_concurrent_update.js @@ -19,8 +19,8 @@ for (var i = 0; i < 3; i++) { var t = db.find_and_modify_concurrent; t.drop(); - assert.commandWorked(t.createIndex({a: 1})); - assert.commandWorked(t.createIndex({b: 1})); + assert.commandWorked(t.ensureIndex({a: 1})); + assert.commandWorked(t.ensureIndex({b: 1})); assert.commandWorked(t.insert({_id: 1, a: 1, b: 1})); var join = diff --git a/jstests/core/find_dedup.js b/jstests/core/find_dedup.js index 8c0f416efb1..8c628b66734 100644 --- a/jstests/core/find_dedup.js +++ b/jstests/core/find_dedup.js @@ -22,7 +22,7 @@ function checkDedup(query, idArray) { // Deduping $or coll.drop(); -coll.createIndex({a: 1, b: 1}); +coll.ensureIndex({a: 1, b: 1}); assert.commandWorked(coll.insert({_id: 1, a: 1, b: 1})); assert.commandWorked(coll.insert({_id: 2, a: 1, b: 1})); assert.commandWorked(coll.insert({_id: 3, a: 2, b: 2})); diff --git a/jstests/core/finda.js b/jstests/core/finda.js index 1525c7aaeda..0f59c4c7f3b 100644 --- a/jstests/core/finda.js +++ b/jstests/core/finda.js @@ -11,7 +11,7 @@ t.drop(); numDocs = 200; function clearQueryPlanCache() { - t.createIndex({c: 1}); + t.ensureIndex({c: 1}); t.dropIndex({c: 1}); } @@ -92,7 +92,7 @@ function queryWithPlanTypes(withDups) { } else { t.save({_id: 0, a: 0, b: 0}); } - t.createIndex({a: 1, _id: 1}); // Include _id for a covered index projection. + t.ensureIndex({a: 1, _id: 1}); // Include _id for a covered index projection. // All plans in order. checkCursorWithBatchSize({a: {$gte: 0}}, null, 150, 150); diff --git a/jstests/core/fts2.js b/jstests/core/fts2.js index 7629d313b00..77b6fe25bd5 100644 --- a/jstests/core/fts2.js +++ b/jstests/core/fts2.js @@ -12,7 +12,7 @@ t.drop(); t.save({_id: 1, x: "az b x", y: "c d m", z: 1}); t.save({_id: 2, x: "c d y", y: "az b n", z: 2}); -t.createIndex({x: "text"}, {weights: {x: 10, y: 1}}); +t.ensureIndex({x: "text"}, {weights: {x: 10, y: 1}}); assert.eq([1, 2], queryIDS(t, "az"), "A1"); assert.eq([2, 1], queryIDS(t, "d"), "A2"); diff --git a/jstests/core/fts3.js b/jstests/core/fts3.js index 32aa3fb002a..6a4c813744a 100644 --- a/jstests/core/fts3.js +++ b/jstests/core/fts3.js @@ -12,7 +12,7 @@ t.drop(); t.save({_id: 1, x: "az b x", y: "c d m", z: 1}); t.save({_id: 2, x: "c d y", y: "az b n", z: 2}); -t.createIndex({x: "text", z: 1}, {weights: {x: 10, y: 1}}); +t.ensureIndex({x: "text", z: 1}, {weights: {x: 10, y: 1}}); assert.eq([1, 2], queryIDS(t, "az"), "A1"); assert.eq([2, 1], queryIDS(t, "d"), "A2"); diff --git a/jstests/core/fts4.js b/jstests/core/fts4.js index ea8055eeb11..16f88a7a760 100644 --- a/jstests/core/fts4.js +++ b/jstests/core/fts4.js @@ -12,7 +12,7 @@ t.drop(); t.save({_id: 1, x: ["az", "b", "x"], y: ["c", "d", "m"], z: 1}); t.save({_id: 2, x: ["c", "d", "y"], y: ["az", "b", "n"], z: 2}); -t.createIndex({y: "text", z: 1}, {weights: {x: 10}}); +t.ensureIndex({y: "text", z: 1}, {weights: {x: 10}}); assert.eq([1, 2], queryIDS(t, "az"), "A1"); assert.eq([2, 1], queryIDS(t, "d"), "A2"); diff --git a/jstests/core/fts5.js b/jstests/core/fts5.js index aa689a46ed9..99cd6ce84bb 100644 --- a/jstests/core/fts5.js +++ b/jstests/core/fts5.js @@ -12,7 +12,7 @@ t.drop(); t.save({_id: 1, x: [{a: "az"}, {a: "b"}, {a: "x"}], y: ["c", "d", "m"], z: 1}); t.save({_id: 2, x: [{a: "c"}, {a: "d"}, {a: "y"}], y: ["az", "b", "n"], z: 2}); -t.createIndex({y: "text", z: 1}, {weights: {"x.a": 10}}); +t.ensureIndex({y: "text", z: 1}, {weights: {"x.a": 10}}); assert.eq([1, 2], queryIDS(t, "az"), "A1"); assert.eq([2, 1], queryIDS(t, "d"), "A2"); diff --git a/jstests/core/fts6.js b/jstests/core/fts6.js index ab757b81d59..7216fc728e9 100644 --- a/jstests/core/fts6.js +++ b/jstests/core/fts6.js @@ -7,8 +7,8 @@ var t = db.jstests_fts6; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: "text"}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: "text"}); t.save({_id: 1, a: 0}); t.save({_id: 2, a: 0, b: "foo"}); diff --git a/jstests/core/fts_blog.js b/jstests/core/fts_blog.js index 2b0fe26e095..cdaba7860fc 100644 --- a/jstests/core/fts_blog.js +++ b/jstests/core/fts_blog.js @@ -10,7 +10,7 @@ t.save({_id: 3, title: "knives are Fun", text: "this is a new blog i am writing. // @tags: [ // sbe_incompatible, // ] -t.createIndex({"title": "text", text: "text"}, {weights: {title: 10}}); +t.ensureIndex({"title": "text", text: "text"}, {weights: {title: 10}}); res = t.find({"$text": {"$search": "blog"}}, {score: {"$meta": "textScore"}}).sort({ score: {"$meta": "textScore"} diff --git a/jstests/core/fts_blogwild.js b/jstests/core/fts_blogwild.js index 881c486edad..207fea471c1 100644 --- a/jstests/core/fts_blogwild.js +++ b/jstests/core/fts_blogwild.js @@ -18,7 +18,7 @@ t.save({ // default weight is 1 // specify weights if you want a field to be more meaningull -t.createIndex({dummy: "text"}, {weights: "$**"}); +t.ensureIndex({dummy: "text"}, {weights: "$**"}); res = t.find({"$text": {"$search": "blog"}}); assert.eq(3, res.length(), "A1"); @@ -29,7 +29,7 @@ assert.eq(3, res.length(), "B1"); // mixing t.dropIndex("dummy_text"); assert.eq(1, t.getIndexKeys().length, "C1"); -t.createIndex({dummy: "text"}, {weights: {"$**": 1, title: 2}}); +t.ensureIndex({dummy: "text"}, {weights: {"$**": 1, title: 2}}); res = t.find({"$text": {"$search": "write"}}, {score: {"$meta": "textScore"}}).sort({ score: {"$meta": "textScore"} diff --git a/jstests/core/fts_casesensitive.js b/jstests/core/fts_casesensitive.js index b4a730a46b5..191631a6ac0 100644 --- a/jstests/core/fts_casesensitive.js +++ b/jstests/core/fts_casesensitive.js @@ -9,7 +9,7 @@ var coll = db.fts_casesensitive; coll.drop(); assert.commandWorked(coll.insert({_id: 0, a: "The Quick Brown Fox Jumps Over The Lazy Dog"})); -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); assert.throws(function() { queryIDS(coll, "hello", null, {$caseSensitive: "invalid"}); diff --git a/jstests/core/fts_diacritic_and_caseinsensitive.js b/jstests/core/fts_diacritic_and_caseinsensitive.js index 1b8a2d0d1e0..107ff447ec9 100644 --- a/jstests/core/fts_diacritic_and_caseinsensitive.js +++ b/jstests/core/fts_diacritic_and_caseinsensitive.js @@ -14,7 +14,7 @@ coll.drop(); assert.commandWorked(coll.insert( {_id: 0, a: "O próximo Vôo à Noite sobre o Atlântico, Põe Freqüentemente o único Médico."})); -assert.commandWorked(coll.createIndex({a: "text"}, {default_language: "portuguese"})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {default_language: "portuguese"})); assert.eq([0], queryIDS(coll, "proximo voo a", null)); assert.eq([0], queryIDS(coll, "átlántico", null)); diff --git a/jstests/core/fts_diacritic_and_casesensitive.js b/jstests/core/fts_diacritic_and_casesensitive.js index 124ec9c092d..0f0e63feca4 100644 --- a/jstests/core/fts_diacritic_and_casesensitive.js +++ b/jstests/core/fts_diacritic_and_casesensitive.js @@ -15,7 +15,7 @@ coll.drop(); assert.commandWorked(coll.insert( {_id: 0, a: "O próximo Vôo à Noite sobre o Atlântico, Põe Freqüentemente o único Médico."})); -assert.commandWorked(coll.createIndex({a: "text"}, {default_language: "portuguese"})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {default_language: "portuguese"})); assert.eq([0], queryIDS(coll, "próximo vôo à ", null, {$diacriticSensitive: true, $caseSensitive: true})); diff --git a/jstests/core/fts_diacriticsensitive.js b/jstests/core/fts_diacriticsensitive.js index 2396860e0db..4440e587ed7 100644 --- a/jstests/core/fts_diacriticsensitive.js +++ b/jstests/core/fts_diacriticsensitive.js @@ -14,7 +14,7 @@ coll.drop(); assert.commandWorked(coll.insert( {_id: 0, a: "O próximo vôo à noite sobre o Atlântico, põe freqüentemente o único médico."})); -assert.commandWorked(coll.createIndex({a: "text"}, {default_language: "portuguese"})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {default_language: "portuguese"})); assert.throws(function() { queryIDS(coll, "hello", null, {$diacriticSensitive: "invalid"}); diff --git a/jstests/core/fts_explain.js b/jstests/core/fts_explain.js index 9b87cedcc51..1f1f0a0e55b 100644 --- a/jstests/core/fts_explain.js +++ b/jstests/core/fts_explain.js @@ -14,7 +14,7 @@ const coll = db.fts_explain; let res; coll.drop(); -res = coll.createIndex({content: "text"}, {default_language: "none"}); +res = coll.ensureIndex({content: "text"}, {default_language: "none"}); assert.commandWorked(res); res = coll.insert({content: "some data"}); diff --git a/jstests/core/fts_index.js b/jstests/core/fts_index.js index 3080534c434..a41ea5a8dab 100644 --- a/jstests/core/fts_index.js +++ b/jstests/core/fts_index.js @@ -27,7 +27,7 @@ coll.getDB().createCollection(coll.getName()); // // Spec passes text-specific index validation. -assert.commandWorked(coll.createIndex({a: "text"}, {name: indexName, default_language: "spanish"})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {name: indexName, default_language: "spanish"})); assert.eq(1, coll.getIndexes() .filter(function(z) { @@ -38,7 +38,7 @@ coll.dropIndexes(); // Spec fails text-specific index validation ("spanglish" unrecognized). assert.commandFailed( - coll.createIndex({a: "text"}, {name: indexName, default_language: "spanglish"})); + coll.ensureIndex({a: "text"}, {name: indexName, default_language: "spanglish"})); assert.eq(0, coll.getIndexes() .filter(function(z) { @@ -48,7 +48,7 @@ assert.eq(0, coll.dropIndexes(); // Spec passes general index validation. -assert.commandWorked(coll.createIndex({"$**": "text"}, {name: indexName})); +assert.commandWorked(coll.ensureIndex({"$**": "text"}, {name: indexName})); assert.eq(1, coll.getIndexes() .filter(function(z) { @@ -58,7 +58,7 @@ assert.eq(1, coll.dropIndexes(); // Spec fails general index validation ("a.$**" invalid field name for key). -assert.commandFailed(coll.createIndex({"a.$**": "text"}, {name: indexName})); +assert.commandFailed(coll.ensureIndex({"a.$**": "text"}, {name: indexName})); assert.eq(0, coll.getIndexes() .filter(function(z) { @@ -68,7 +68,7 @@ assert.eq(0, coll.dropIndexes(); // SERVER-19519 Spec fails if '_fts' is specified on a non-text index. -assert.commandFailed(coll.createIndex({_fts: 1}, {name: indexName})); +assert.commandFailed(coll.ensureIndex({_fts: 1}, {name: indexName})); assert.eq(0, coll.getIndexes() .filter(function(z) { @@ -76,7 +76,7 @@ assert.eq(0, }) .length); coll.dropIndexes(); -assert.commandFailed(coll.createIndex({_fts: "text"}, {name: indexName})); +assert.commandFailed(coll.ensureIndex({_fts: "text"}, {name: indexName})); assert.eq(0, coll.getIndexes() .filter(function(z) { @@ -92,22 +92,22 @@ coll.dropIndexes(); // Can create a text index on a collection where no documents have invalid language_override. coll.insert({a: ""}); coll.insert({a: "", language: "spanish"}); -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); coll.drop(); // Can't create a text index on a collection containing document with an invalid language_override. coll.insert({a: "", language: "spanglish"}); -assert.commandFailed(coll.createIndex({a: "text"})); +assert.commandFailed(coll.ensureIndex({a: "text"})); coll.drop(); // Can insert documents with valid language_override into text-indexed collection. -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); coll.insert({a: ""}); assert.commandWorked(coll.insert({a: "", language: "spanish"})); coll.drop(); // Can't insert documents with invalid language_override into text-indexed collection. -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); assert.writeError(coll.insert({a: "", language: "spanglish"})); coll.drop(); @@ -115,69 +115,69 @@ coll.drop(); // 3. Collections may have at most one text index. // -// createIndex() becomes a no-op on an equivalent index spec. +// ensureIndex() becomes a no-op on an equivalent index spec. assert.commandWorked(coll.getDB().createCollection(coll.getName())); assert.eq(1, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: 1, b: "text", c: 1})); +assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: 1, b: "text", c: 1})); +assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: 1, b: "text", c: 1}, {background: true})); +assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}, {background: true})); assert.eq(2, coll.getIndexes().length); -assert.commandFailedWithCode(coll.createIndex({a: 1, b: 1, c: "text"}), +assert.commandFailedWithCode(coll.ensureIndex({a: 1, b: 1, c: "text"}), ErrorCodes.CannotCreateIndex); assert.commandFailedWithCode( - coll.createIndex({a: 1, _fts: "text", _ftsx: 1, c: 1}, {weights: {b: 1}}), + coll.ensureIndex({a: 1, _fts: "text", _ftsx: 1, c: 1}, {weights: {b: 1}}), ErrorCodes.IndexOptionsConflict); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: 1, b: "text", c: 1}, {default_language: "english"})); +assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}, {default_language: "english"})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: 1, b: "text", c: 1}, {textIndexVersion: 2})); +assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}, {textIndexVersion: 2})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: 1, b: "text", c: 1}, {language_override: "language"})); +assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}, {language_override: "language"})); assert.eq(2, coll.getIndexes().length); coll.drop(); // Two index specs are also considered equivalent if they differ only in 'textIndexVersion', and -// createIndex() becomes a no-op on repeated requests that only differ in this way. +// ensureIndex() becomes a no-op on repeated requests that only differ in this way. assert.commandWorked(coll.getDB().createCollection(coll.getName())); assert.eq(1, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: "text"}, {textIndexVersion: 1})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 1})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: "text"}, {textIndexVersion: 2})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 2})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: "text"}, {textIndexVersion: 3})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 3})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); assert.eq(2, coll.getIndexes().length); coll.drop(); assert.commandWorked(coll.getDB().createCollection(coll.getName())); assert.eq(1, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: "text"}, {textIndexVersion: 3})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 3})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: "text"}, {textIndexVersion: 2})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 2})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: "text"}, {textIndexVersion: 1})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 1})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); assert.eq(2, coll.getIndexes().length); coll.drop(); -// createIndex() fails if a second text index would be built. +// ensureIndex() fails if a second text index would be built. assert.commandWorked(coll.getDB().createCollection(coll.getName())); assert.eq(1, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({a: 1, b: "text", c: 1})); -assert.eq(2, coll.getIndexes().length); -assert.commandFailed(coll.createIndex({a: 1, _fts: "text", _ftsx: 1, c: 1}, {weights: {d: 1}})); -assert.commandFailed(coll.createIndex({a: 1, b: "text", c: 1}, {default_language: "none"})); -assert.commandFailed(coll.createIndex({a: 1, b: "text", c: 1}, {language_override: "idioma"})); -assert.commandFailed(coll.createIndex({a: 1, b: "text", c: 1}, {weights: {d: 1}})); -assert.commandFailed(coll.createIndex({a: 1, b: "text", d: 1})); -assert.commandFailed(coll.createIndex({a: 1, d: "text", c: 1})); -assert.commandFailed(coll.createIndex({b: "text"})); -assert.commandFailed(coll.createIndex({b: "text", c: 1})); -assert.commandFailed(coll.createIndex({a: 1, b: "text"})); +assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1})); +assert.eq(2, coll.getIndexes().length); +assert.commandFailed(coll.ensureIndex({a: 1, _fts: "text", _ftsx: 1, c: 1}, {weights: {d: 1}})); +assert.commandFailed(coll.ensureIndex({a: 1, b: "text", c: 1}, {default_language: "none"})); +assert.commandFailed(coll.ensureIndex({a: 1, b: "text", c: 1}, {language_override: "idioma"})); +assert.commandFailed(coll.ensureIndex({a: 1, b: "text", c: 1}, {weights: {d: 1}})); +assert.commandFailed(coll.ensureIndex({a: 1, b: "text", d: 1})); +assert.commandFailed(coll.ensureIndex({a: 1, d: "text", c: 1})); +assert.commandFailed(coll.ensureIndex({b: "text"})); +assert.commandFailed(coll.ensureIndex({b: "text", c: 1})); +assert.commandFailed(coll.ensureIndex({a: 1, b: "text"})); coll.dropIndexes(); @@ -185,7 +185,7 @@ coll.dropIndexes(); // 4. Text indexes properly handle large keys. // -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); var longstring = ""; var longstring2 = ""; @@ -201,7 +201,7 @@ coll.dropIndexes(); // // 5. Bad weights test cases. // -assert.commandFailed(coll.createIndex({a: 1, _fts: "text", _ftsx: 1, c: 1}, {weights: {}})); -assert.commandFailed(coll.createIndex({a: 1, _fts: "text", _ftsx: 1, c: 1})); +assert.commandFailed(coll.ensureIndex({a: 1, _fts: "text", _ftsx: 1, c: 1}, {weights: {}})); +assert.commandFailed(coll.ensureIndex({a: 1, _fts: "text", _ftsx: 1, c: 1})); coll.drop(); diff --git a/jstests/core/fts_index2.js b/jstests/core/fts_index2.js index 3ae6e45214e..1c8454002a7 100644 --- a/jstests/core/fts_index2.js +++ b/jstests/core/fts_index2.js @@ -14,7 +14,7 @@ coll1.drop(); coll2.drop(); assert.commandWorked(coll1.insert({a: {b: "some content"}})); -assert.commandWorked(coll1.createIndex({"$**": "text"})); +assert.commandWorked(coll1.ensureIndex({"$**": "text"})); assert.eq(1, coll1.count({$text: {$search: "content"}})); // Rename within same database. diff --git a/jstests/core/fts_index3.js b/jstests/core/fts_index3.js index 0f57c7a9d80..02bd9559591 100644 --- a/jstests/core/fts_index3.js +++ b/jstests/core/fts_index3.js @@ -12,7 +12,7 @@ var coll = db.fts_index3; // 1) Create a text index on a single field, insert a document, update the value of the field, and // verify that $text with the new value returns the document. coll.drop(); -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); assert.commandWorked(coll.insert({a: "hello"})); assert.eq(1, coll.find({$text: {$search: "hello"}}).itcount()); assert.commandWorked(coll.update({}, {$set: {a: "world"}})); @@ -21,7 +21,7 @@ assert.eq(1, coll.find({$text: {$search: "world"}}).itcount()); // 2) Same as #1, but with a wildcard text index. coll.drop(); -assert.commandWorked(coll.createIndex({"$**": "text"})); +assert.commandWorked(coll.ensureIndex({"$**": "text"})); assert.commandWorked(coll.insert({a: "hello"})); assert.eq(1, coll.find({$text: {$search: "hello"}}).itcount()); assert.commandWorked(coll.update({}, {$set: {a: "world"}})); @@ -31,7 +31,7 @@ assert.eq(1, coll.find({$text: {$search: "world"}}).itcount()); // 3) Create a compound text index with an index prefix, insert a document, update the value of the // index prefix field, and verify that $text with the new value returns the document. coll.drop(); -assert.commandWorked(coll.createIndex({a: 1, b: "text"})); +assert.commandWorked(coll.ensureIndex({a: 1, b: "text"})); assert.commandWorked(coll.insert({a: 1, b: "hello"})); assert.eq(1, coll.find({a: 1, $text: {$search: "hello"}}).itcount()); assert.commandWorked(coll.update({}, {$set: {a: 2}})); @@ -40,7 +40,7 @@ assert.eq(1, coll.find({a: 2, $text: {$search: "hello"}}).itcount()); // 4) Same as #3, but with a wildcard text index. coll.drop(); -assert.commandWorked(coll.createIndex({a: 1, "$**": "text"})); +assert.commandWorked(coll.ensureIndex({a: 1, "$**": "text"})); assert.commandWorked(coll.insert({a: 1, b: "hello"})); assert.eq(1, coll.find({a: 1, $text: {$search: "hello"}}).itcount()); assert.commandWorked(coll.update({}, {$set: {a: 2}})); @@ -50,7 +50,7 @@ assert.eq(1, coll.find({a: 2, $text: {$search: "hello"}}).itcount()); // 5) Create a compound text index with an index suffix, insert a document, update the value of the // index suffix field, and verify that $text with the new value returns the document. coll.drop(); -assert.commandWorked(coll.createIndex({a: "text", b: 1})); +assert.commandWorked(coll.ensureIndex({a: "text", b: 1})); assert.commandWorked(coll.insert({a: "hello", b: 1})); assert.eq(1, coll.find({b: 1, $text: {$search: "hello"}}).itcount()); assert.commandWorked(coll.update({}, {$set: {b: 2}})); @@ -59,7 +59,7 @@ assert.eq(1, coll.find({b: 2, $text: {$search: "hello"}}).itcount()); // 6) Same as #5, but with a wildcard text index. coll.drop(); -assert.commandWorked(coll.createIndex({"$**": "text", b: 1})); +assert.commandWorked(coll.ensureIndex({"$**": "text", b: 1})); assert.commandWorked(coll.insert({a: "hello", b: 1})); assert.eq(1, coll.find({b: 1, $text: {$search: "hello"}}).itcount()); assert.commandWorked(coll.update({}, {$set: {b: 2}})); @@ -69,7 +69,7 @@ assert.eq(1, coll.find({b: 2, $text: {$search: "hello"}}).itcount()); // 7) Create a text index on a single field, insert a document, update the language of the document // (so as to change the stemming), and verify that $text with the new language returns the document. coll.drop(); -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); assert.commandWorked(coll.insert({a: "testing", language: "es"})); assert.eq(1, coll.find({$text: {$search: "testing", $language: "es"}}).itcount()); assert.eq(0, coll.find({$text: {$search: "testing", $language: "en"}}).itcount()); @@ -79,7 +79,7 @@ assert.eq(1, coll.find({$text: {$search: "testing", $language: "en"}}).itcount() // 8) Same as #7, but with a wildcard text index. coll.drop(); -assert.commandWorked(coll.createIndex({"$**": "text"})); +assert.commandWorked(coll.ensureIndex({"$**": "text"})); assert.commandWorked(coll.insert({a: "testing", language: "es"})); assert.eq(1, coll.find({$text: {$search: "testing", $language: "es"}}).itcount()); assert.eq(0, coll.find({$text: {$search: "testing", $language: "en"}}).itcount()); @@ -91,7 +91,7 @@ assert.eq(1, coll.find({$text: {$search: "testing", $language: "en"}}).itcount() // subdocument (so as to change the stemming), and verify that $text with the new language returns // the document. coll.drop(); -assert.commandWorked(coll.createIndex({"a.b": "text"})); +assert.commandWorked(coll.ensureIndex({"a.b": "text"})); assert.commandWorked(coll.insert({a: {b: "testing", language: "es"}})); assert.eq(1, coll.find({$text: {$search: "testing", $language: "es"}}).itcount()); assert.eq(0, coll.find({$text: {$search: "testing", $language: "en"}}).itcount()); @@ -101,7 +101,7 @@ assert.eq(1, coll.find({$text: {$search: "testing", $language: "en"}}).itcount() // 10) Same as #9, but with a wildcard text index. coll.drop(); -assert.commandWorked(coll.createIndex({"$**": "text"})); +assert.commandWorked(coll.ensureIndex({"$**": "text"})); assert.commandWorked(coll.insert({a: {b: "testing", language: "es"}})); assert.eq(1, coll.find({$text: {$search: "testing", $language: "es"}}).itcount()); assert.eq(0, coll.find({$text: {$search: "testing", $language: "en"}}).itcount()); @@ -113,7 +113,7 @@ assert.eq(1, coll.find({$text: {$search: "testing", $language: "en"}}).itcount() // update the language of the document (so as to change the stemming), and verify that $text with // the new language returns the document. coll.drop(); -assert.commandWorked(coll.createIndex({a: "text"}, {language_override: "idioma"})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {language_override: "idioma"})); assert.commandWorked(coll.insert({a: "testing", idioma: "es"})); assert.eq(1, coll.find({$text: {$search: "testing", $language: "es"}}).itcount()); assert.eq(0, coll.find({$text: {$search: "testing", $language: "en"}}).itcount()); @@ -123,7 +123,7 @@ assert.eq(1, coll.find({$text: {$search: "testing", $language: "en"}}).itcount() // 12) Same as #11, but with a wildcard text index. coll.drop(); -assert.commandWorked(coll.createIndex({"$**": "text"}, {language_override: "idioma"})); +assert.commandWorked(coll.ensureIndex({"$**": "text"}, {language_override: "idioma"})); assert.commandWorked(coll.insert({a: "testing", idioma: "es"})); assert.eq(1, coll.find({$text: {$search: "testing", $language: "es"}}).itcount()); assert.eq(0, coll.find({$text: {$search: "testing", $language: "en"}}).itcount()); diff --git a/jstests/core/fts_index_version1.js b/jstests/core/fts_index_version1.js index 57b7c7710b6..8ae979c7dbe 100644 --- a/jstests/core/fts_index_version1.js +++ b/jstests/core/fts_index_version1.js @@ -3,19 +3,19 @@ var coll = db.fts_index_version1; // Test basic English search. coll.drop(); -assert.commandWorked(coll.createIndex({a: "text"}, {textIndexVersion: 1})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 1})); assert.commandWorked(coll.insert({a: "running"})); assert.eq(1, coll.count({$text: {$search: "run"}})); // Test search with a "language alias" only recognized in textIndexVersion:1 (note that the stopword // machinery doesn't recognize these aliases). coll.drop(); -assert.commandWorked(coll.createIndex({a: "text"}, {default_language: "eng", textIndexVersion: 1})); +assert.commandWorked(coll.ensureIndex({a: "text"}, {default_language: "eng", textIndexVersion: 1})); assert.commandWorked(coll.insert({a: "running"})); assert.eq(1, coll.count({$text: {$search: "run"}})); // Test that textIndexVersion:1 indexes ignore subdocument language annotations. coll.drop(); -assert.commandWorked(coll.createIndex({"a.b": "text"}, {textIndexVersion: 1})); +assert.commandWorked(coll.ensureIndex({"a.b": "text"}, {textIndexVersion: 1})); assert.commandWorked(coll.insert({language: "none", a: {language: "english", b: "the"}})); assert.eq(1, coll.count({$text: {$search: "the", $language: "none"}})); diff --git a/jstests/core/fts_index_version2.js b/jstests/core/fts_index_version2.js index 1e579ba12cb..10f803f30c6 100644 --- a/jstests/core/fts_index_version2.js +++ b/jstests/core/fts_index_version2.js @@ -15,7 +15,7 @@ assert.commandWorked(coll.insert( {_id: 0, a: "O próximo Vôo à Noite sobre o Atlântico, Põe Freqüentemente o único Médico."})); assert.commandWorked( - coll.createIndex({a: "text"}, {default_language: "portuguese", textIndexVersion: 2})); + coll.ensureIndex({a: "text"}, {default_language: "portuguese", textIndexVersion: 2})); assert.eq([0], queryIDS(coll, "próximo vôo à ", null)); assert.eq([0], queryIDS(coll, "atlântico", null)); diff --git a/jstests/core/fts_mix.js b/jstests/core/fts_mix.js index cdaaf1d17ff..abfdcc6aefd 100644 --- a/jstests/core/fts_mix.js +++ b/jstests/core/fts_mix.js @@ -77,7 +77,7 @@ tc.save({ // -------------------------------------------- INDEXING & WEIGHTING ------------------------------- // start with basic index, one item with default weight -tc.createIndex({"title": "text"}); +tc.ensureIndex({"title": "text"}); // test the single result case.. res = tc.find({"$text": {"$search": "Victoria"}}); @@ -87,19 +87,19 @@ assert.eq(10, res[0]._id); tc.dropIndexes(); // now let's see about multiple fields, with specific weighting -tc.createIndex({"title": "text", "text": "text"}, {weights: {"title": 10}}); +tc.ensureIndex({"title": "text", "text": "text"}, {weights: {"title": 10}}); assert(resultsEq([9, 7, 8], queryIDS(tc, "members physics"))); tc.dropIndexes(); // test all-1 weighting with "$**" -tc.createIndex({"$**": "text"}); +tc.ensureIndex({"$**": "text"}); assert(resultsEq([2, 8, 7], queryIDS(tc, "family tea estate"))); tc.dropIndexes(); // non-1 weight on "$**" + other weight specified for some field -tc.createIndex({"$**": "text"}, {weights: {"$**": 10, "text": 2}}); +tc.ensureIndex({"$**": "text"}, {weights: {"$**": 10, "text": 2}}); assert(resultsEq([7, 5], queryIDS(tc, "Olympic Games gold medal"))); tc.dropIndexes(); @@ -108,7 +108,7 @@ tc.dropIndexes(); // ------------------------------------------ // go back to "$**": 1, "title": 10.. and test more specific "search" functionality! -tc.createIndex({"$**": "text"}, {weights: {"title": 10}}); +tc.ensureIndex({"$**": "text"}, {weights: {"title": 10}}); // -------------------------------------------- STEMMING ------------------------------------------- diff --git a/jstests/core/fts_partition1.js b/jstests/core/fts_partition1.js index efc148da675..055f574baf1 100644 --- a/jstests/core/fts_partition1.js +++ b/jstests/core/fts_partition1.js @@ -13,7 +13,7 @@ t.insert({_id: 2, x: 1, y: "bar"}); t.insert({_id: 3, x: 2, y: "foo"}); t.insert({_id: 4, x: 2, y: "bar"}); -t.createIndex({x: 1, y: "text"}); +t.ensureIndex({x: 1, y: "text"}); assert.throws(function() { const cursor = t.find({"$text": {"$search": "foo"}}); diff --git a/jstests/core/fts_partition_no_multikey.js b/jstests/core/fts_partition_no_multikey.js index b819c3abfbd..af28380a804 100644 --- a/jstests/core/fts_partition_no_multikey.js +++ b/jstests/core/fts_partition_no_multikey.js @@ -1,7 +1,7 @@ t = db.fts_partition_no_multikey; t.drop(); -t.createIndex({x: 1, y: "text"}); +t.ensureIndex({x: 1, y: "text"}); assert.commandWorked(t.insert({x: 5, y: "this is fun"})); diff --git a/jstests/core/fts_phrase.js b/jstests/core/fts_phrase.js index dfe9d3692af..eae0a1c268d 100644 --- a/jstests/core/fts_phrase.js +++ b/jstests/core/fts_phrase.js @@ -11,7 +11,7 @@ t.save({_id: 1, title: "my blog post", text: "i am writing a blog. yay"}); t.save({_id: 2, title: "my 2nd post", text: "this is a new blog i am typing. yay"}); t.save({_id: 3, title: "knives are Fun", text: "this is a new blog i am writing. yay"}); -t.createIndex({"title": "text", text: "text"}, {weights: {title: 10}}); +t.ensureIndex({"title": "text", text: "text"}, {weights: {title: 10}}); res = t.find({"$text": {"$search": "blog write"}}, {score: {"$meta": "textScore"}}).sort({ score: {"$meta": "textScore"} diff --git a/jstests/core/geo1.js b/jstests/core/geo1.js index 8a80f59d692..7917799377e 100644 --- a/jstests/core/geo1.js +++ b/jstests/core/geo1.js @@ -19,10 +19,10 @@ assert.commandWorked(t.insert({zip: "94061", loc: [37.463911, 122.23396]})); // test "2d" has to be first assert.eq(1, t.getIndexKeys().length, "S1"); -t.createIndex({zip: 1, loc: "2d"}); +t.ensureIndex({zip: 1, loc: "2d"}); assert.eq(1, t.getIndexKeys().length, "S2"); -t.createIndex(idx); +t.ensureIndex(idx); assert.eq(2, t.getIndexKeys().length, "S3"); assert.eq(3, t.count(), "B1"); @@ -42,5 +42,5 @@ assert.eq("06525", t.find({loc: wb.loc})[0].zip, "C3"); t.drop(); -t.createIndex({loc: "2d"}, {min: -500, max: 500, bits: 4}); +t.ensureIndex({loc: "2d"}, {min: -500, max: 500, bits: 4}); assert.commandWorked(t.insert({loc: [200, 200]})); diff --git a/jstests/core/geo10.js b/jstests/core/geo10.js index b330ce52911..c33f90cdfbd 100644 --- a/jstests/core/geo10.js +++ b/jstests/core/geo10.js @@ -10,7 +10,7 @@ coll = db.geo10; coll.drop(); -assert.commandWorked(db.geo10.createIndex({c: '2d', t: 1}, {min: 0, max: Math.pow(2, 40)})); +assert.commandWorked(db.geo10.ensureIndex({c: '2d', t: 1}, {min: 0, max: Math.pow(2, 40)})); assert.eq(2, db.geo10.getIndexes().length, "A3"); assert.commandWorked(db.geo10.insert({c: [1, 1], t: 1})); diff --git a/jstests/core/geo2.js b/jstests/core/geo2.js index b0552e2f773..01a4c467339 100644 --- a/jstests/core/geo2.js +++ b/jstests/core/geo2.js @@ -18,7 +18,7 @@ t.insert(arr); assert.eq(t.count(), 100 * 100); assert.eq(t.count(), n - 1); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); function a(cur) { var total = 0; diff --git a/jstests/core/geo3.js b/jstests/core/geo3.js index 40a3d9a5e75..e75c9b14245 100644 --- a/jstests/core/geo3.js +++ b/jstests/core/geo3.js @@ -19,7 +19,7 @@ t.insert(arr); assert.eq(t.count(), 100 * 100); assert.eq(t.count(), n - 1); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); // Test the "query" parameter in $geoNear. @@ -52,7 +52,7 @@ function testFiltering(msg) { testFiltering("just loc"); assert.commandWorked(t.dropIndex({loc: "2d"})); -assert.commandWorked(t.createIndex({loc: "2d", a: 1})); +assert.commandWorked(t.ensureIndex({loc: "2d", a: 1})); res = t.aggregate([ {$geoNear: {near: [50, 50], distanceField: "dist", query: {a: 2}}}, @@ -64,7 +64,7 @@ res.forEach(doc => assert.eq(2, doc.a, tojson(doc))); testFiltering("loc and a"); assert.commandWorked(t.dropIndex({loc: "2d", a: 1})); -assert.commandWorked(t.createIndex({loc: "2d", b: 1})); +assert.commandWorked(t.ensureIndex({loc: "2d", b: 1})); testFiltering("loc and b"); diff --git a/jstests/core/geo6.js b/jstests/core/geo6.js index 0ee06508ea2..d6b43771b2c 100644 --- a/jstests/core/geo6.js +++ b/jstests/core/geo6.js @@ -6,7 +6,7 @@ t = db.geo6; t.drop(); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); assert.eq(0, t.find().itcount(), "pre0"); assert.eq(0, t.find({loc: {$near: [50, 50]}}).itcount(), "pre1"); diff --git a/jstests/core/geo7.js b/jstests/core/geo7.js index 9d1b7f574ca..4316c8d6c03 100644 --- a/jstests/core/geo7.js +++ b/jstests/core/geo7.js @@ -6,13 +6,13 @@ t.insert({_id: 2, y: [1, 1], z: 3}); t.insert({_id: 3, y: [1, 1], z: 4}); t.insert({_id: 4, y: [1, 1], z: 5}); -t.createIndex({y: "2d", z: 1}); +t.ensureIndex({y: "2d", z: 1}); assert.eq(1, t.find({y: [1, 1], z: 3}).itcount(), "A1"); t.dropIndex({y: "2d", z: 1}); -t.createIndex({y: "2d"}); +t.ensureIndex({y: "2d"}); assert.eq(1, t.find({y: [1, 1], z: 3}).itcount(), "A2"); t.insert({_id: 5, y: 5}); diff --git a/jstests/core/geo9.js b/jstests/core/geo9.js index 4204c842987..eacd30f9a6d 100644 --- a/jstests/core/geo9.js +++ b/jstests/core/geo9.js @@ -14,8 +14,8 @@ t.save({_id: 4, a: [50, 50], b: [10, 10]}); t.save({_id: 5, a: [51, 51], b: [11, 11]}); t.save({_id: 6, a: [52, 52], b: [12, 12]}); -t.createIndex({a: "2d"}); -t.createIndex({b: "2d"}); +t.ensureIndex({a: "2d"}); +t.ensureIndex({b: "2d"}); function check(field) { var q = {}; diff --git a/jstests/core/geo_2d_explain.js b/jstests/core/geo_2d_explain.js index 109c5618795..370ef47e708 100644 --- a/jstests/core/geo_2d_explain.js +++ b/jstests/core/geo_2d_explain.js @@ -13,7 +13,7 @@ var n = 1000; // insert n documents with integer _id, a can be 1-5, loc is close to [40, 40] t.drop(); -t.createIndex({loc: "2d", _id: 1}); +t.ensureIndex({loc: "2d", _id: 1}); var x = 40; var y = 40; diff --git a/jstests/core/geo_2d_with_geojson_point.js b/jstests/core/geo_2d_with_geojson_point.js index 3930f3c2c96..bb35fccd9da 100644 --- a/jstests/core/geo_2d_with_geojson_point.js +++ b/jstests/core/geo_2d_with_geojson_point.js @@ -4,7 +4,7 @@ var t = db.geo_2d_with_geojson_point; t.drop(); -t.createIndex({loc: '2d'}); +t.ensureIndex({loc: '2d'}); var geoJSONPoint = {type: 'Point', coordinates: [0, 0]}; diff --git a/jstests/core/geo_allowedcomparisons.js b/jstests/core/geo_allowedcomparisons.js index 01795941533..c1ef4efcba1 100644 --- a/jstests/core/geo_allowedcomparisons.js +++ b/jstests/core/geo_allowedcomparisons.js @@ -33,7 +33,7 @@ oldPolygon = [[-5, -5], [-5, 5], [5, 5], [5, -5], [-5, -5]]; oldCenter = [[0, 0], 1]; t.drop(); -t.createIndex({geo: "2d"}); +t.ensureIndex({geo: "2d"}); // 2d doesn't know what to do w/this assert.writeError(t.insert({geo: geojsonPoint})); // Old points are OK. @@ -102,7 +102,7 @@ t.dropIndex({geo: "2d"}); runTests(); // 2dsphere index now. -assert.commandWorked(t.createIndex({geo: "2dsphere"})); +assert.commandWorked(t.ensureIndex({geo: "2dsphere"})); // 2dsphere does not support arrays of points. assert.writeError(t.insert({geo: [geojsonPoint2, geojsonPoint]})); runTests(); diff --git a/jstests/core/geo_array0.js b/jstests/core/geo_array0.js index 8a4e81283f8..0f27de02e49 100644 --- a/jstests/core/geo_array0.js +++ b/jstests/core/geo_array0.js @@ -16,7 +16,7 @@ function test(index) { assert.commandWorked(res); if (index) { - assert.commandWorked(t.createIndex({loc: "2d", zip: 1})); + assert.commandWorked(t.ensureIndex({loc: "2d", zip: 1})); assert.eq(2, t.getIndexKeys().length); } diff --git a/jstests/core/geo_array1.js b/jstests/core/geo_array1.js index 6066ed1dc6f..08b6060f3cc 100644 --- a/jstests/core/geo_array1.js +++ b/jstests/core/geo_array1.js @@ -21,7 +21,7 @@ function test(index) { } if (index) { - t.createIndex({loc: "2d"}); + t.ensureIndex({loc: "2d"}); } // Pull them back diff --git a/jstests/core/geo_array2.js b/jstests/core/geo_array2.js index 2a7a1303e0c..d2a197891e6 100644 --- a/jstests/core/geo_array2.js +++ b/jstests/core/geo_array2.js @@ -27,7 +27,7 @@ for (var i = -1; i < 2; i++) { } } -assert.commandWorked(t.createIndex({loc: "2d", type: 1})); +assert.commandWorked(t.ensureIndex({loc: "2d", type: 1})); print("Starting testing phase... "); diff --git a/jstests/core/geo_big_polygon.js b/jstests/core/geo_big_polygon.js index db0d00cf6ff..eb2a24ad719 100644 --- a/jstests/core/geo_big_polygon.js +++ b/jstests/core/geo_big_polygon.js @@ -10,7 +10,7 @@ var coll = db.geo_big_polygon; coll.drop(); -// coll.createIndex({ loc : "2dsphere" }); +// coll.ensureIndex({ loc : "2dsphere" }); var bigCRS = {type: "name", properties: {name: "urn:x-mongodb:crs:strictwinding:EPSG:4326"}}; @@ -56,7 +56,7 @@ assert.eq(coll.find({loc: {$geoIntersects: {$geometry: bigPoly20}}}).count(), 4) assert.eq(coll.find({loc: {$geoWithin: {$geometry: bigPoly20Comp}}}).count(), 1); assert.eq(coll.find({loc: {$geoIntersects: {$geometry: bigPoly20Comp}}}).count(), 2); -assert.commandWorked(coll.createIndex({loc: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({loc: "2dsphere"})); assert.eq(coll.find({loc: {$geoWithin: {$geometry: bigPoly20}}}).count(), 3); assert.eq(coll.find({loc: {$geoIntersects: {$geometry: bigPoly20}}}).count(), 4); @@ -81,11 +81,11 @@ assert.eq(coll.find({loc: {$geoWithin: {$geometry: bigPoly20Comp}}}).count(), 1) assert.eq(coll.find({loc: {$geoIntersects: {$geometry: bigPoly20Comp}}}).count(), 2); // 2. Building index fails due to big polygon -assert.commandFailed(coll.createIndex({loc: "2dsphere"})); +assert.commandFailed(coll.ensureIndex({loc: "2dsphere"})); // 3. After removing big polygon, index builds successfully assert.commandWorked(coll.remove({_id: "bigPoly10"})); -assert.commandWorked(coll.createIndex({loc: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({loc: "2dsphere"})); // 4. With index, insert fails. assert.writeError(coll.insert({_id: "bigPoly10", loc: bigPoly10})); diff --git a/jstests/core/geo_big_polygon2.js b/jstests/core/geo_big_polygon2.js index 53e0631e791..80339cb4fed 100644 --- a/jstests/core/geo_big_polygon2.js +++ b/jstests/core/geo_big_polygon2.js @@ -560,7 +560,7 @@ const nsidedPolys = [ ]; // Populate with 2dsphere index -assert.commandWorked(coll.createIndex({geo: "2dsphere"}), "create 2dsphere index"); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}), "create 2dsphere index"); // Insert objects into collection objects.forEach(function(o) { @@ -573,10 +573,10 @@ objects.forEach(function(o) { }); // Try creating other index types -assert.commandWorked(coll.createIndex({geo: "2dsphere", a: 1}), "compound index, geo"); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere", a: 1}), "compound index, geo"); // These other index types will fail because of the GeoJSON documents -assert.commandFailed(coll.createIndex({geo: "2dsphere", a: "text"}), "compound index, geo & text"); -assert.commandFailed(coll.createIndex({geo: "2d"}), "2d index"); +assert.commandFailed(coll.ensureIndex({geo: "2dsphere", a: "text"}), "compound index, geo & text"); +assert.commandFailed(coll.ensureIndex({geo: "2d"}), "2d index"); totalObjects = coll.count(); @@ -589,7 +589,7 @@ indexes.forEach(function(index) { if (index != "none") { // Create index - assert.commandWorked(coll.createIndex({geo: index}), "create " + index + " index"); + assert.commandWorked(coll.ensureIndex({geo: index}), "create " + index + " index"); } // These polygons should not be queryable diff --git a/jstests/core/geo_big_polygon3.js b/jstests/core/geo_big_polygon3.js index cd4591dd66a..a55ce87c3d6 100644 --- a/jstests/core/geo_big_polygon3.js +++ b/jstests/core/geo_big_polygon3.js @@ -63,7 +63,7 @@ var bigPoly = { }; // 2dsphere index required -assert.commandWorked(coll.createIndex({geo: "2dsphere"}), "2dsphere index"); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}), "2dsphere index"); // $nearSphere on big polygon should fail assert.throws(function() { @@ -222,7 +222,7 @@ assert.eq(totalDocs, "crs84CRS or epsg4326CRS intersects"); // Add index and look again for stored point & spherical CRS documents -assert.commandWorked(coll.createIndex({geo: "2dsphere"}), "2dsphere index"); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}), "2dsphere index"); assert.eq(totalDocs, coll.count({geo: {$geoWithin: {$geometry: poly}}}), diff --git a/jstests/core/geo_borders.js b/jstests/core/geo_borders.js index 01989a445bc..8eac710db0f 100644 --- a/jstests/core/geo_borders.js +++ b/jstests/core/geo_borders.js @@ -24,11 +24,11 @@ overallMax = 1; // Create a point index slightly smaller than the points we have var res = - t.createIndex({loc: "2d"}, {max: overallMax - epsilon / 2, min: overallMin + epsilon / 2}); + t.ensureIndex({loc: "2d"}, {max: overallMax - epsilon / 2, min: overallMin + epsilon / 2}); assert.commandFailed(res); // Create a point index only slightly bigger than the points we have -res = t.createIndex({loc: "2d"}, {max: overallMax + epsilon, min: overallMin - epsilon}); +res = t.ensureIndex({loc: "2d"}, {max: overallMax + epsilon, min: overallMin - epsilon}); assert.commandWorked(res); // ************ diff --git a/jstests/core/geo_box1.js b/jstests/core/geo_box1.js index 28fe85c83cf..300e65c2dc6 100644 --- a/jstests/core/geo_box1.js +++ b/jstests/core/geo_box1.js @@ -14,7 +14,7 @@ for (x = 0; x <= 20; x++) { } } -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); searches = [ [[1, 2], [4, 5]], diff --git a/jstests/core/geo_box2.js b/jstests/core/geo_box2.js index e4e51ec9e10..f0f99b15ea0 100644 --- a/jstests/core/geo_box2.js +++ b/jstests/core/geo_box2.js @@ -14,10 +14,10 @@ for (i = 1; i < 10; i++) { } } -t.createIndex({"loc": "2d"}); +t.ensureIndex({"loc": "2d"}); assert.eq(9, t.find({loc: {$within: {$box: [[4, 4], [6, 6]]}}}).itcount(), "A1"); t.dropIndex({"loc": "2d"}); -t.createIndex({"loc": "2d"}, {"min": 0, "max": 10}); +t.ensureIndex({"loc": "2d"}, {"min": 0, "max": 10}); assert.eq(9, t.find({loc: {$within: {$box: [[4, 4], [6, 6]]}}}).itcount(), "B1"); diff --git a/jstests/core/geo_box3.js b/jstests/core/geo_box3.js index 4a91ffb0d1d..7f9dd12ea60 100644 --- a/jstests/core/geo_box3.js +++ b/jstests/core/geo_box3.js @@ -7,7 +7,7 @@ t = db.geo_box3; t.drop(); t.insert({point: {x: -15000000, y: 10000000}}); -t.createIndex({point: "2d"}, {min: -21000000, max: 21000000}); +t.ensureIndex({point: "2d"}, {min: -21000000, max: 21000000}); var c = t.find({point: {"$within": {"$box": [[-20000000, 7000000], [0, 15000000]]}}}); assert.eq(1, c.count(), "A1"); @@ -15,7 +15,7 @@ assert.eq(1, c.count(), "A1"); t = db.geo_box3; t.drop(); t.insert({point: {x: -15, y: 10}}); -t.createIndex({point: "2d"}, {min: -21, max: 21}); +t.ensureIndex({point: "2d"}, {min: -21, max: 21}); var c = t.find({point: {"$within": {"$box": [[-20, 7], [0, 15]]}}}); assert.eq(1, c.count(), "B1"); @@ -24,13 +24,13 @@ assert.eq(1, c.count(), "B1"); t = db.geo_box3; t.drop(); t.insert({point: {x: 1.0, y: 1.0}}); -t.createIndex({point: "2d"}, {min: -2, max: 2}); +t.ensureIndex({point: "2d"}, {min: -2, max: 2}); var c = t.find({point: {"$within": {"$box": [[.1, .1], [1.99, 1.99]]}}}); assert.eq(1, c.count(), "C1"); t = db.geo_box3; t.drop(); t.insert({point: {x: 3.9, y: 3.9}}); -t.createIndex({point: "2d"}, {min: 0, max: 4}); +t.ensureIndex({point: "2d"}, {min: 0, max: 4}); var c = t.find({point: {"$within": {"$box": [[2.05, 2.05], [3.99, 3.99]]}}}); assert.eq(1, c.count(), "D1"); diff --git a/jstests/core/geo_center_sphere1.js b/jstests/core/geo_center_sphere1.js index cbef0b4302d..df3ea9bb36c 100644 --- a/jstests/core/geo_center_sphere1.js +++ b/jstests/core/geo_center_sphere1.js @@ -45,7 +45,7 @@ function test(index) { assert.commandWorked(bulk.execute()); if (index) { - t.createIndex({loc: index}); + t.ensureIndex({loc: index}); } for (i = 0; i < searches.length; i++) { diff --git a/jstests/core/geo_center_sphere2.js b/jstests/core/geo_center_sphere2.js index 2b5e8be5cab..4a263cba259 100644 --- a/jstests/core/geo_center_sphere2.js +++ b/jstests/core/geo_center_sphere2.js @@ -50,7 +50,7 @@ for (var test = 0; test < numTests; test++) { do { t.drop(); startPoint = randomPoint(); - t.createIndex({loc: "2d"}, {bits: bits}); + t.ensureIndex({loc: "2d"}, {bits: bits}); } while (!pointIsOK(startPoint, radius)); var pointsIn = 0; diff --git a/jstests/core/geo_circle1.js b/jstests/core/geo_circle1.js index 0df085bcb4d..65d2a467eab 100644 --- a/jstests/core/geo_circle1.js +++ b/jstests/core/geo_circle1.js @@ -29,7 +29,7 @@ for (x = 0; x <= 20; x++) { } } -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); for (i = 0; i < searches.length; i++) { // print( tojson( searches[i] ) + "\t" + correct[i].length ) diff --git a/jstests/core/geo_circle2.js b/jstests/core/geo_circle2.js index 6be02377259..30a826b4f27 100644 --- a/jstests/core/geo_circle2.js +++ b/jstests/core/geo_circle2.js @@ -7,7 +7,7 @@ t = db.geo_circle2; t.drop(); -t.createIndex({loc: "2d", categories: 1}, {"name": "placesIdx", "min": -100, "max": 100}); +t.ensureIndex({loc: "2d", categories: 1}, {"name": "placesIdx", "min": -100, "max": 100}); t.insert( {"uid": 368900, "loc": {"x": -36, "y": -8}, "categories": ["sports", "hotel", "restaurant"]}); diff --git a/jstests/core/geo_circle2a.js b/jstests/core/geo_circle2a.js index f647bdc82ea..b084d1027ec 100644 --- a/jstests/core/geo_circle2a.js +++ b/jstests/core/geo_circle2a.js @@ -6,7 +6,7 @@ var coll = db.geo_circle2a; coll.drop(); coll.insert({p: [1112, 3473], t: [{k: 'a', v: 'b'}, {k: 'c', v: 'd'}]}); -coll.createIndex({p: '2d', 't.k': 1}, {min: 0, max: 10000}); +coll.ensureIndex({p: '2d', 't.k': 1}, {min: 0, max: 10000}); // Succeeds, since on direct lookup should not use the index assert(1 == coll.find({p: [1112, 3473], 't.k': 'a'}).count(), "A"); @@ -18,7 +18,7 @@ coll.drop(); coll.insert({point: [1, 10], tags: [{k: 'key', v: 'value'}, {k: 'key2', v: 123}]}); coll.insert({point: [1, 10], tags: [{k: 'key', v: 'value'}]}); -coll.createIndex({point: "2d", "tags.k": 1, "tags.v": 1}); +coll.ensureIndex({point: "2d", "tags.k": 1, "tags.v": 1}); // Succeeds, since should now lookup multi-keys correctly assert(2 == coll.find({point: {$within: {$box: [[0, 0], [12, 12]]}}}).count(), "C"); @@ -31,7 +31,7 @@ coll.drop(); coll.insert({point: [1, 10], tags: [{k: {'hello': 'world'}, v: 'value'}, {k: 'key2', v: 123}]}); coll.insert({point: [1, 10], tags: [{k: 'key', v: 'value'}]}); -coll.createIndex({point: "2d", "tags.k": 1, "tags.v": 1}); +coll.ensureIndex({point: "2d", "tags.k": 1, "tags.v": 1}); // Succeeds, should be able to look up the complex element assert(1 == diff --git a/jstests/core/geo_circle3.js b/jstests/core/geo_circle3.js index e931e96783d..3be564cd180 100644 --- a/jstests/core/geo_circle3.js +++ b/jstests/core/geo_circle3.js @@ -14,7 +14,7 @@ db.places.save({"_id": n++, "loc": {"x": 4.9999, "y": 52.0001}}); db.places.save({"_id": n++, "loc": {"x": 5.0001, "y": 52.0001}}); db.places.save({"_id": n++, "loc": {"x": 4.9999, "y": 51.9999}}); db.places.save({"_id": n++, "loc": {"x": 5.0001, "y": 51.9999}}); -db.places.createIndex({loc: "2d"}); +db.places.ensureIndex({loc: "2d"}); radius = 0.0001; center = [5, 52]; // print(db.places.find({"loc" : {"$within" : {"$center" : [center, radius]}}}).count()) diff --git a/jstests/core/geo_circle4.js b/jstests/core/geo_circle4.js index 04ce685db38..1feb72a2e48 100644 --- a/jstests/core/geo_circle4.js +++ b/jstests/core/geo_circle4.js @@ -18,7 +18,7 @@ function test(index) { db.server848.save({"_id": 8, "loc": {"x": 4.9999, "y": 51.9999}}); db.server848.save({"_id": 9, "loc": {"x": 5.0001, "y": 51.9999}}); if (index) { - db.server848.createIndex({loc: "2d"}); + db.server848.ensureIndex({loc: "2d"}); } r = db.server848.find({"loc": {"$within": {"$center": [center, radius]}}}, {_id: 1}); assert.eq(5, r.count(), "A1"); diff --git a/jstests/core/geo_circle5.js b/jstests/core/geo_circle5.js index 27b973a8ede..34b3773ad00 100644 --- a/jstests/core/geo_circle5.js +++ b/jstests/core/geo_circle5.js @@ -8,7 +8,7 @@ db.server1238.drop(); db.server1238.remove({}); db.server1238.save({loc: [5000000, 900000], id: 1}); db.server1238.save({loc: [5000000, 900000], id: 2}); -db.server1238.createIndex({loc: "2d"}, {min: -21000000, max: 21000000}); +db.server1238.ensureIndex({loc: "2d"}, {min: -21000000, max: 21000000}); db.server1238.save({loc: [5000000, 900000], id: 3}); db.server1238.save({loc: [5000000, 900000], id: 4}); diff --git a/jstests/core/geo_exactfetch.js b/jstests/core/geo_exactfetch.js index 93b0b7afcda..68ecc9941ae 100644 --- a/jstests/core/geo_exactfetch.js +++ b/jstests/core/geo_exactfetch.js @@ -7,7 +7,7 @@ t.drop(); function test(indexname) { assert.eq(1, t.find({lon_lat: [-71.34895, 42.46037]}).itcount(), indexname); - t.createIndex({lon_lat: indexname, population: -1}); + t.ensureIndex({lon_lat: indexname, population: -1}); assert.eq(2, t.find({lon_lat: {$nearSphere: [-71.34895, 42.46037]}}).itcount(), indexname); assert.eq(1, t.find({lon_lat: [-71.34895, 42.46037]}).itcount(), indexname); t.dropIndex({lon_lat: indexname, population: -1}); diff --git a/jstests/core/geo_fiddly_box.js b/jstests/core/geo_fiddly_box.js index 9f5a9e8d6c4..6c2adbe66c6 100644 --- a/jstests/core/geo_fiddly_box.js +++ b/jstests/core/geo_fiddly_box.js @@ -11,7 +11,7 @@ t = db.geo_fiddly_box; t.drop(); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); t.insert({"loc": [3, 1]}); t.insert({"loc": [3, 0.5]}); @@ -35,7 +35,7 @@ step = 1; numItems = 0; t.drop(); -t.createIndex({loc: "2d"}, {max: max + epsilon / 2, min: min - epsilon / 2}); +t.ensureIndex({loc: "2d"}, {max: max + epsilon / 2, min: min - epsilon / 2}); for (var x = min; x <= max; x += step) { for (var y = min; y <= max; y += step) { diff --git a/jstests/core/geo_fiddly_box2.js b/jstests/core/geo_fiddly_box2.js index a0f87203163..6a40b5032b5 100644 --- a/jstests/core/geo_fiddly_box2.js +++ b/jstests/core/geo_fiddly_box2.js @@ -16,18 +16,18 @@ t.insert({"letter": "B", "position": [2, 0]}); t.insert({"letter": "L", "position": [3, 0]}); t.insert({"letter": "E", "position": [4, 0]}); -t.createIndex({position: "2d"}); +t.ensureIndex({position: "2d"}); result = t.find({"position": {"$within": {"$box": [[-3, -1], [0, 1]]}}}); assert.eq(4, result.count()); t.dropIndex({position: "2d"}); -t.createIndex({position: "2d"}, {min: -10000000, max: 10000000}); +t.ensureIndex({position: "2d"}, {min: -10000000, max: 10000000}); result = t.find({"position": {"$within": {"$box": [[-3, -1], [0, 1]]}}}); assert.eq(4, result.count()); t.dropIndex({position: "2d"}); -t.createIndex({position: "2d"}, {min: -1000000000, max: 1000000000}); +t.ensureIndex({position: "2d"}, {min: -1000000000, max: 1000000000}); result = t.find({"position": {"$within": {"$box": [[-3, -1], [0, 1]]}}}); assert.eq(4, result.count()); diff --git a/jstests/core/geo_invalid_2d_params.js b/jstests/core/geo_invalid_2d_params.js index 33419302b47..b538d430a66 100644 --- a/jstests/core/geo_invalid_2d_params.js +++ b/jstests/core/geo_invalid_2d_params.js @@ -1,8 +1,8 @@ var t = db.geo_invalid_2d_params; t.drop(); -assert.commandFailed(t.createIndex({loc: "2d"}, {bits: 33})); -assert.commandFailed(t.createIndex({loc: "2d"}, {min: -1, max: -1})); -assert.commandFailed(t.createIndex({loc: "2d"}, {bits: -1})); -assert.commandFailed(t.createIndex({loc: "2d"}, {min: 10, max: 9})); -assert.commandWorked(t.createIndex({loc: "2d"}, {bits: 1, min: -1, max: 1})); +assert.commandFailed(t.ensureIndex({loc: "2d"}, {bits: 33})); +assert.commandFailed(t.ensureIndex({loc: "2d"}, {min: -1, max: -1})); +assert.commandFailed(t.ensureIndex({loc: "2d"}, {bits: -1})); +assert.commandFailed(t.ensureIndex({loc: "2d"}, {min: 10, max: 9})); +assert.commandWorked(t.ensureIndex({loc: "2d"}, {bits: 1, min: -1, max: 1})); diff --git a/jstests/core/geo_mindistance.js b/jstests/core/geo_mindistance.js index 8994892c77d..33153e62008 100644 --- a/jstests/core/geo_mindistance.js +++ b/jstests/core/geo_mindistance.js @@ -56,7 +56,7 @@ for (var x = 0; x <= 10; x += 1) { } } -t.createIndex({loc: "2dsphere"}); +t.ensureIndex({loc: "2dsphere"}); var n_docs = t.count(), geoJSONPoint = {type: 'Point', coordinates: [0, 0]}, legacyPoint = [0, 0]; diff --git a/jstests/core/geo_mindistance_boundaries.js b/jstests/core/geo_mindistance_boundaries.js index 7024cfa2ec9..9d556b341ac 100644 --- a/jstests/core/geo_mindistance_boundaries.js +++ b/jstests/core/geo_mindistance_boundaries.js @@ -9,7 +9,7 @@ t.drop(); t.insert({loc: [1, 0]}); // 1 degree of longitude from origin. /* $minDistance is supported for 2dsphere index only, not 2d */ -t.createIndex({loc: "2dsphere"}); +t.ensureIndex({loc: "2dsphere"}); // // Useful constants. diff --git a/jstests/core/geo_multikey0.js b/jstests/core/geo_multikey0.js index 27075a779ee..827dd9a41a1 100644 --- a/jstests/core/geo_multikey0.js +++ b/jstests/core/geo_multikey0.js @@ -11,7 +11,7 @@ assert.eq( // Check that conflicting constraints are satisfied by parallel array elements with a 2d index on // loc. if (0) { // SERVER-3793 - t.createIndex({loc: '2d'}); + t.ensureIndex({loc: '2d'}); assert.eq( 1, t.count({loc: {x: 20, y: 30}, $and: [{loc: {$gt: {x: 20, y: 35}, $lt: {x: 20, y: 34}}}]})); @@ -26,6 +26,6 @@ assert.eq(1, t.count({loc: [20, 30], x: {$gt: 1.7, $lt: 1.2}})); // Check that conflicting constraints are satisfied by parallel array elements of x with a 2d index // on loc,x. if (0) { // SERVER-3793 - t.createIndex({loc: '2d', x: 1}); + t.ensureIndex({loc: '2d', x: 1}); assert.eq(1, t.count({loc: [20, 30], x: {$gt: 1.7, $lt: 1.2}})); } diff --git a/jstests/core/geo_multikey1.js b/jstests/core/geo_multikey1.js index e6d0ec086da..9c092f4ec31 100644 --- a/jstests/core/geo_multikey1.js +++ b/jstests/core/geo_multikey1.js @@ -12,7 +12,7 @@ for (i = 0; i < 10; ++i) { t.save({loc: locArr, a: arr, b: arr, c: arr}); // Parallel arrays are allowed for geo indexes. -assert.commandWorked(t.createIndex({loc: '2d', a: 1, b: 1, c: 1})); +assert.commandWorked(t.ensureIndex({loc: '2d', a: 1, b: 1, c: 1})); // Parallel arrays are not allowed for normal indexes. -assert.commandFailed(t.createIndex({loc: 1, a: 1, b: 1, c: 1})); +assert.commandFailed(t.ensureIndex({loc: 1, a: 1, b: 1, c: 1})); diff --git a/jstests/core/geo_multinest0.js b/jstests/core/geo_multinest0.js index b76c18dbd5c..6c0106d70df 100644 --- a/jstests/core/geo_multinest0.js +++ b/jstests/core/geo_multinest0.js @@ -16,7 +16,7 @@ var res = t.insert({zip: "10003", data: [{loc: [30, 30], type: "home"}, {loc: [50, 50], type: "work"}]}); assert.commandWorked(res); -assert.commandWorked(t.createIndex({"data.loc": "2d", zip: 1})); +assert.commandWorked(t.ensureIndex({"data.loc": "2d", zip: 1})); assert.eq(2, t.getIndexKeys().length); res = @@ -41,7 +41,7 @@ t.insert({zip: "10002", data: [{loc: [20, 20], type: "home"}, {loc: [50, 50], ty res = t.insert({zip: "10003", data: [{loc: [{x: 30, y: 30}, [50, 50]], type: "home"}]}); assert(!res.hasWriteError()); -assert.commandWorked(t.createIndex({"data.loc": "2d", zip: 1})); +assert.commandWorked(t.ensureIndex({"data.loc": "2d", zip: 1})); assert.eq(2, t.getIndexKeys().length); res = diff --git a/jstests/core/geo_multinest1.js b/jstests/core/geo_multinest1.js index a3fb424829e..d033cfa86b8 100644 --- a/jstests/core/geo_multinest1.js +++ b/jstests/core/geo_multinest1.js @@ -16,7 +16,7 @@ var res = t.insert({zip: "10003", data: [{loc: [30, 30], type: "home"}, {loc: [49, 49], type: "work"}]}); assert.commandWorked(res); -assert.commandWorked(t.createIndex({"data.loc": "2d", zip: 1})); +assert.commandWorked(t.ensureIndex({"data.loc": "2d", zip: 1})); assert.eq(2, t.getIndexKeys().length); res = diff --git a/jstests/core/geo_near_bounds_overflow.js b/jstests/core/geo_near_bounds_overflow.js index 1d13d568220..ff674e89052 100644 --- a/jstests/core/geo_near_bounds_overflow.js +++ b/jstests/core/geo_near_bounds_overflow.js @@ -13,7 +13,7 @@ function testBounds(min, max) { // Handle case where either 1. indexLambda will fail but not throw. We are asserting it // works, so the outer lambda generates an exception. 2. indexLambda itself will throw. const indexLambda = function(t) { - return t.createIndex({loc: '2d'}, indexBounds); + return t.ensureIndex({loc: '2d'}, indexBounds); }; const assertLambda = function(t, lambda) { assert.commandWorked(lambda(t)); diff --git a/jstests/core/geo_near_random1.js b/jstests/core/geo_near_random1.js index 52dc1e34cbb..b6350e6c6a7 100644 --- a/jstests/core/geo_near_random1.js +++ b/jstests/core/geo_near_random1.js @@ -34,7 +34,7 @@ test.testPt(test.mkPt(), opts); // Test $nearSphere with a 2dsphere index assert.commandWorked(db.geo_near_random1.dropIndex({loc: '2d'})); -assert.commandWorked(db.geo_near_random1.createIndex({loc: '2dsphere'})); +assert.commandWorked(db.geo_near_random1.ensureIndex({loc: '2dsphere'})); test.testPt([0, 0], opts); test.testPt(test.mkPt(), opts); test.testPt(test.mkPt(), opts); diff --git a/jstests/core/geo_near_random2.js b/jstests/core/geo_near_random2.js index 4ffa95cffae..c524e7a7da4 100644 --- a/jstests/core/geo_near_random2.js +++ b/jstests/core/geo_near_random2.js @@ -38,7 +38,7 @@ test.testPt(test.mkPt(0.8), opts); // Test $nearSphere with 2dsphere index assert.commandWorked(db.geo_near_random2.dropIndex({loc: '2d'})); -assert.commandWorked(db.geo_near_random2.createIndex({loc: '2dsphere'})); +assert.commandWorked(db.geo_near_random2.ensureIndex({loc: '2dsphere'})); test.testPt([0, 0], opts); test.testPt(test.mkPt(0.8), opts); test.testPt(test.mkPt(0.8), opts); diff --git a/jstests/core/geo_nearwithin.js b/jstests/core/geo_nearwithin.js index 6ded21dbd83..37d963b3ddc 100644 --- a/jstests/core/geo_nearwithin.js +++ b/jstests/core/geo_nearwithin.js @@ -13,7 +13,7 @@ for (var x = -points; x < points; x += 1) { } } -assert.commandWorked(t.createIndex({geo: "2d"})); +assert.commandWorked(t.ensureIndex({geo: "2d"})); const runQuery = (center) => t.find({$and: [{geo: {$near: [0, 0]}}, {geo: {$within: {$center: center}}}]}).toArray(); diff --git a/jstests/core/geo_oob_sphere.js b/jstests/core/geo_oob_sphere.js index 08a10758c77..3a878f06b78 100644 --- a/jstests/core/geo_oob_sphere.js +++ b/jstests/core/geo_oob_sphere.js @@ -15,7 +15,7 @@ assert.commandWorked(coll.insert({loc: {x: 30, y: 89}})); assert.commandWorked(coll.insert({loc: {x: 30, y: 89}})); assert.commandWorked(coll.insert({loc: {x: 30, y: 91}})); -assert.commandWorked(coll.createIndex({loc: "2d"})); +assert.commandWorked(coll.ensureIndex({loc: "2d"})); assert.throws(function() { coll.find({loc: {$nearSphere: [30, 91], $maxDistance: 0.25}}).count(); diff --git a/jstests/core/geo_operator_crs.js b/jstests/core/geo_operator_crs.js index 6118c4efcc7..cab73fedb0f 100644 --- a/jstests/core/geo_operator_crs.js +++ b/jstests/core/geo_operator_crs.js @@ -14,7 +14,7 @@ coll.drop(); // Test 2dsphere index // -assert.commandWorked(coll.createIndex({geo: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"})); var legacyZeroPt = [0, 0]; var jsonZeroPt = {type: "Point", coordinates: [0, 0]}; @@ -42,7 +42,7 @@ assert.commandWorked(coll.dropIndexes()); // Test 2d Index // -assert.commandWorked(coll.createIndex({geo: "2d"})); +assert.commandWorked(coll.ensureIndex({geo: "2d"})); assert.commandWorked(coll.insert({geo: legacy90Pt})); @@ -55,7 +55,7 @@ assert.close(result[0].dis, Math.PI / 2); // Test with a 2d and 2dsphere index using the aggregation $geoNear stage. // -assert.commandWorked(coll.createIndex({geo: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"})); result = coll.aggregate({$geoNear: {near: jsonZeroPt, distanceField: "dis"}}).toArray(); assert.close(result[0].dis, (Math.PI / 2) * earthRadiusMeters); }()); diff --git a/jstests/core/geo_or.js b/jstests/core/geo_or.js index d571e3ad6e3..04caca0e106 100644 --- a/jstests/core/geo_or.js +++ b/jstests/core/geo_or.js @@ -15,7 +15,7 @@ t.save({loc: q}); var indexname = "2dsphere"; -t.createIndex({loc: indexname}); +t.ensureIndex({loc: indexname}); assert.eq(1, t.find({loc: p}).itcount(), indexname); @@ -87,7 +87,7 @@ t.dropIndexes(); var indexname = "2d"; -t.createIndex({loc: indexname}); +t.ensureIndex({loc: indexname}); assert.eq(2, t.find({ diff --git a/jstests/core/geo_poly_edge.js b/jstests/core/geo_poly_edge.js index eee43bfc55c..971483e9eef 100644 --- a/jstests/core/geo_poly_edge.js +++ b/jstests/core/geo_poly_edge.js @@ -8,7 +8,7 @@ var coll = db.getCollection('jstests_geo_poly_edge'); coll.drop(); -coll.createIndex({loc: "2d"}); +coll.ensureIndex({loc: "2d"}); coll.insert({loc: [10, 10]}); coll.insert({loc: [10, -10]}); diff --git a/jstests/core/geo_poly_line.js b/jstests/core/geo_poly_line.js index 49e394d140e..3eff8d12496 100644 --- a/jstests/core/geo_poly_line.js +++ b/jstests/core/geo_poly_line.js @@ -12,7 +12,7 @@ t.insert({loc: [2, 0]}); t.insert({loc: [3, 0]}); t.insert({loc: [4, 0]}); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); printjson(t.find({loc: {"$within": {"$polygon": [[0, 0], [2, 0], [4, 0]]}}}).toArray()); diff --git a/jstests/core/geo_polygon1.js b/jstests/core/geo_polygon1.js index 3d6d2ad81b2..34b0cafa1d4 100644 --- a/jstests/core/geo_polygon1.js +++ b/jstests/core/geo_polygon1.js @@ -13,7 +13,7 @@ for (x = 1; x < 9; x++) { } } -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); triangle = [[0, 0], [1, 1], [0, 2]]; @@ -50,7 +50,7 @@ pacman = [ ]; t.save({loc: [1, 3]}); // Add a point that's in -assert.commandWorked(t.createIndex({loc: "2d"})); +assert.commandWorked(t.ensureIndex({loc: "2d"})); assert.eq(1, t.find({loc: {$within: {$polygon: pacman}}}).count(), "Pacman single point"); diff --git a/jstests/core/geo_polygon2.js b/jstests/core/geo_polygon2.js index 7a6ad0aedb5..e5dc6d4e941 100644 --- a/jstests/core/geo_polygon2.js +++ b/jstests/core/geo_polygon2.js @@ -231,7 +231,7 @@ for (var test = 0; test < numTests; test++) { } } - var res = t.createIndex({loc: "2d"}, {bits: 1 + bits, max: bounds[1], min: bounds[0]}); + var res = t.ensureIndex({loc: "2d"}, {bits: 1 + bits, max: bounds[1], min: bounds[0]}); assert.commandWorked(res); t.insert({loc: allPointsIn}); diff --git a/jstests/core/geo_queryoptimizer.js b/jstests/core/geo_queryoptimizer.js index 17b3c5997f2..56653551ba7 100644 --- a/jstests/core/geo_queryoptimizer.js +++ b/jstests/core/geo_queryoptimizer.js @@ -6,7 +6,7 @@ t = db.geo_qo1; t.drop(); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); t.insert({'issue': 0}); t.insert({'issue': 1}); diff --git a/jstests/core/geo_regex0.js b/jstests/core/geo_regex0.js index 7629c193ea2..1add7f4e0c3 100644 --- a/jstests/core/geo_regex0.js +++ b/jstests/core/geo_regex0.js @@ -4,7 +4,7 @@ t = db.regex0; t.drop(); -t.createIndex({point: '2d', words: 1}); +t.ensureIndex({point: '2d', words: 1}); t.insert({point: [1, 1], words: ['foo', 'bar']}); regex = { diff --git a/jstests/core/geo_s2cursorlimitskip.js b/jstests/core/geo_s2cursorlimitskip.js index 3413314fd27..f599ccd5b62 100644 --- a/jstests/core/geo_s2cursorlimitskip.js +++ b/jstests/core/geo_s2cursorlimitskip.js @@ -15,7 +15,7 @@ var testDB = db.getSiblingDB("geo_s2cursorlimitskip"); var t = testDB.geo_s2getmmm; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); Random.setRandomSeed(); var random = Random.rand; diff --git a/jstests/core/geo_s2dedupnear.js b/jstests/core/geo_s2dedupnear.js index 0619d307bfa..bbf92ded8d7 100644 --- a/jstests/core/geo_s2dedupnear.js +++ b/jstests/core/geo_s2dedupnear.js @@ -6,7 +6,7 @@ t = db.geo_s2dedupnear; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); var x = { "type": "Polygon", "coordinates": [[[100.0, 0.0], [101.0, 0.0], [101.0, 1.0], [100.0, 1.0], [100.0, 0.0]]] diff --git a/jstests/core/geo_s2descindex.js b/jstests/core/geo_s2descindex.js index c4ebb435a55..4a945895c57 100644 --- a/jstests/core/geo_s2descindex.js +++ b/jstests/core/geo_s2descindex.js @@ -34,7 +34,7 @@ for (var t = 0; t < descriptors.length; t++) { jsTest.log("Trying 2dsphere index with descriptor " + tojson(descriptor)); coll.drop(); - coll.createIndex(descriptor); + coll.ensureIndex(descriptor); coll.insert(docA); coll.insert(docB); @@ -55,7 +55,7 @@ for (var t = 0; t < descriptors.length; t++) { jsTest.log("Trying case found in wild..."); coll.drop(); -coll.createIndex({coordinates: "2dsphere", field: -1}); +coll.ensureIndex({coordinates: "2dsphere", field: -1}); coll.insert({coordinates: [-118.240013, 34.073893]}); var query = { coordinates: {$geoWithin: {$centerSphere: [[-118.240013, 34.073893], 0.44915760491198753]}}, diff --git a/jstests/core/geo_s2dupe_points.js b/jstests/core/geo_s2dupe_points.js index 18550b0bbbb..2514cdbf4c1 100644 --- a/jstests/core/geo_s2dupe_points.js +++ b/jstests/core/geo_s2dupe_points.js @@ -7,7 +7,7 @@ // ] t = db.geo_s2dupe_points; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); function testDuplicates(shapeName, shapeWithDupes, shapeWithoutDupes) { // insert a doc with dupes diff --git a/jstests/core/geo_s2edgecases.js b/jstests/core/geo_s2edgecases.js index 6e4633f58c8..3dabfdf0bcb 100644 --- a/jstests/core/geo_s2edgecases.js +++ b/jstests/core/geo_s2edgecases.js @@ -51,7 +51,7 @@ penguin2 = { }; t.insert({geo: penguin2}); -t.createIndex({geo: "2dsphere", nonGeo: 1}); +t.ensureIndex({geo: "2dsphere", nonGeo: 1}); res = t.find({"geo": {"$geoIntersects": {"$geometry": roundworldpoint}}}); assert.eq(res.count(), 2); diff --git a/jstests/core/geo_s2exact.js b/jstests/core/geo_s2exact.js index 92ce551d873..2c8571c0830 100644 --- a/jstests/core/geo_s2exact.js +++ b/jstests/core/geo_s2exact.js @@ -5,7 +5,7 @@ t.drop(); function test(geometry) { t.insert({geo: geometry}); assert.eq(1, t.find({geo: geometry}).itcount(), tojson(geometry)); - t.createIndex({geo: "2dsphere"}); + t.ensureIndex({geo: "2dsphere"}); assert.eq(1, t.find({geo: geometry}).itcount(), tojson(geometry)); t.dropIndex({geo: "2dsphere"}); } diff --git a/jstests/core/geo_s2explain.js b/jstests/core/geo_s2explain.js index 9ae76163485..842c6eb22c8 100644 --- a/jstests/core/geo_s2explain.js +++ b/jstests/core/geo_s2explain.js @@ -11,7 +11,7 @@ var point1 = {loc: {type: "Point", coordinates: [10, 10]}}; var point2 = {loc: {type: "Point", coordinates: [10.001, 10]}}; assert.commandWorked(t.insert([point1, point2])); -assert.commandWorked(t.createIndex({loc: "2dsphere"})); +assert.commandWorked(t.ensureIndex({loc: "2dsphere"})); var explain = t.find({loc: {$nearSphere: {type: "Point", coordinates: [10, 10]}}}) .limit(1) diff --git a/jstests/core/geo_s2holesameasshell.js b/jstests/core/geo_s2holesameasshell.js index 0b3f8ea35ec..5407fe45c26 100644 --- a/jstests/core/geo_s2holesameasshell.js +++ b/jstests/core/geo_s2holesameasshell.js @@ -1,7 +1,7 @@ // If polygons have holes, the holes cannot be equal to the entire geometry. var t = db.geo_s2holessameasshell; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); var centerPoint = {"type": "Point", "coordinates": [0.5, 0.5]}; var edgePoint = {"type": "Point", "coordinates": [0, 0.5]}; diff --git a/jstests/core/geo_s2index.js b/jstests/core/geo_s2index.js index 328b43d04ab..ecc20c7e637 100644 --- a/jstests/core/geo_s2index.js +++ b/jstests/core/geo_s2index.js @@ -10,7 +10,7 @@ someline = { "coordinates": [[40, 5], [40, 5], [40, 5], [41, 6], [41, 6]] }; t.insert({geo: someline, nonGeo: "someline"}); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); foo = t.find({geo: {$geoIntersects: {$geometry: {type: "Point", coordinates: [40, 5]}}}}).next(); assert.eq(foo.geo, someline); t.dropIndex({geo: "2dsphere"}); @@ -56,7 +56,7 @@ somepoly = { }; t.insert({geo: somepoly, nonGeo: "somepoly"}); -var res = t.createIndex({geo: "2dsphere", nonGeo: 1}); +var res = t.ensureIndex({geo: "2dsphere", nonGeo: 1}); // We have a point without any geo data. Don't error. assert.commandWorked(res); @@ -86,7 +86,7 @@ assert.eq(res.itcount(), 1); // Don't crash mongod if we give it bad input. t.drop(); -t.createIndex({loc: "2dsphere", x: 1}); +t.ensureIndex({loc: "2dsphere", x: 1}); t.save({loc: [0, 0]}); assert.throws(function() { return t.count({loc: {$foo: [0, 0]}}); @@ -102,7 +102,7 @@ assert.throws(function() { // If we specify a datum, it has to be valid (WGS84). t.drop(); -t.createIndex({loc: "2dsphere"}); +t.ensureIndex({loc: "2dsphere"}); res = t.insert({ loc: {type: 'Point', coordinates: [40, 5], crs: {type: 'name', properties: {name: 'EPSG:2000'}}} }); @@ -127,36 +127,36 @@ assert.commandWorked(res); // 0 <= coarsestIndexedLevel <= finestIndexedLevel <= 30. t.drop(); t.save({loc: [0, 0]}); -res = t.createIndex({loc: "2dsphere"}, {finestIndexedLevel: 17, coarsestIndexedLevel: 5}); +res = t.ensureIndex({loc: "2dsphere"}, {finestIndexedLevel: 17, coarsestIndexedLevel: 5}); assert.commandWorked(res); // Ensure the index actually works at a basic level assert.neq(null, t.findOne({loc: {$geoNear: {$geometry: {type: 'Point', coordinates: [0, 0]}}}})); t.drop(); t.save({loc: [0, 0]}); -res = t.createIndex({loc: "2dsphere"}, {finestIndexedLevel: 31, coarsestIndexedLevel: 5}); +res = t.ensureIndex({loc: "2dsphere"}, {finestIndexedLevel: 31, coarsestIndexedLevel: 5}); assert.commandFailed(res); t.drop(); t.save({loc: [0, 0]}); -res = t.createIndex({loc: "2dsphere"}, {finestIndexedLevel: 30, coarsestIndexedLevel: 0}); +res = t.ensureIndex({loc: "2dsphere"}, {finestIndexedLevel: 30, coarsestIndexedLevel: 0}); assert.commandWorked(res); // Ensure the index actually works at a basic level assert.neq(null, t.findOne({loc: {$geoNear: {$geometry: {type: 'Point', coordinates: [0, 0]}}}})); t.drop(); t.save({loc: [0, 0]}); -res = t.createIndex({loc: "2dsphere"}, {finestIndexedLevel: 30, coarsestIndexedLevel: -1}); +res = t.ensureIndex({loc: "2dsphere"}, {finestIndexedLevel: 30, coarsestIndexedLevel: -1}); assert.commandFailed(res); // SERVER-21491 Verify that 2dsphere index options require correct types. -res = t.createIndex({loc: '2dsphere'}, {'2dsphereIndexVersion': 'NOT_A_NUMBER'}); +res = t.ensureIndex({loc: '2dsphere'}, {'2dsphereIndexVersion': 'NOT_A_NUMBER'}); assert.commandFailed(res); -res = t.createIndex({loc: '2dsphere'}, {finestIndexedLevel: 'NOT_A_NUMBER'}); +res = t.ensureIndex({loc: '2dsphere'}, {finestIndexedLevel: 'NOT_A_NUMBER'}); assert.commandFailedWithCode(res, ErrorCodes.TypeMismatch); -res = t.createIndex({loc: '2dsphere'}, {coarsestIndexedLevel: 'NOT_A_NUMBER'}); +res = t.ensureIndex({loc: '2dsphere'}, {coarsestIndexedLevel: 'NOT_A_NUMBER'}); assert.commandFailedWithCode(res, ErrorCodes.TypeMismatch); // Ensure polygon which previously triggered an assertion error in SERVER-19674 diff --git a/jstests/core/geo_s2indexoldformat.js b/jstests/core/geo_s2indexoldformat.js index ffe472464d4..43974f695cb 100644 --- a/jstests/core/geo_s2indexoldformat.js +++ b/jstests/core/geo_s2indexoldformat.js @@ -9,7 +9,7 @@ t.insert({geo: [41, 6], nonGeo: ["pointB"]}); t.insert({geo: [41, 6]}); t.insert({geo: {x: 40.6, y: 5.4}}); -t.createIndex({geo: "2dsphere", nonGeo: 1}); +t.ensureIndex({geo: "2dsphere", nonGeo: 1}); res = t.find({"geo": {"$geoIntersects": {"$geometry": {x: 40, y: 5}}}}); assert.eq(res.count(), 1); diff --git a/jstests/core/geo_s2indexversion1.js b/jstests/core/geo_s2indexversion1.js index 2df90bb1235..a06670ab220 100644 --- a/jstests/core/geo_s2indexversion1.js +++ b/jstests/core/geo_s2indexversion1.js @@ -15,27 +15,27 @@ coll.drop(); // var res; -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": -1}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": -1}); assert.commandFailed(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 0}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 0}); assert.commandFailed(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 4}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 4}); assert.commandFailed(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": Infinity}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": Infinity}); assert.commandFailed(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": "foo"}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": "foo"}); assert.commandFailed(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": {a: 1}}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": {a: 1}}); assert.commandFailed(res); coll.drop(); @@ -43,31 +43,31 @@ coll.drop(); // Index build should succeed for valid values of "2dsphereIndexVersion". // -res = coll.createIndex({geo: "2dsphere"}); +res = coll.ensureIndex({geo: "2dsphere"}); assert.commandWorked(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1}); assert.commandWorked(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": NumberInt(1)}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": NumberInt(1)}); assert.commandWorked(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": NumberLong(1)}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": NumberLong(1)}); assert.commandWorked(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2}); assert.commandWorked(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": NumberInt(2)}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": NumberInt(2)}); assert.commandWorked(res); coll.drop(); -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": NumberLong(2)}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": NumberLong(2)}); assert.commandWorked(res); coll.drop(); @@ -75,7 +75,7 @@ coll.drop(); // {2dsphereIndexVersion: 3} should be the default for new indexes. // -res = coll.createIndex({geo: "2dsphere"}); +res = coll.ensureIndex({geo: "2dsphere"}); assert.commandWorked(res); var specObj = coll.getIndexes().filter(function(z) { return z.name == "geo_2dsphere"; @@ -85,26 +85,26 @@ coll.drop(); // // Two index specs are considered equivalent if they differ only in '2dsphereIndexVersion', and -// createIndex() should become a no-op on repeated requests that only differ in this way. +// ensureIndex() should become a no-op on repeated requests that only differ in this way. // assert.commandWorked(coll.getDB().createCollection(coll.getName())); assert.eq(1, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({geo: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"})); assert.eq(2, coll.getIndexes().length); coll.drop(); assert.commandWorked(coll.getDB().createCollection(coll.getName())); assert.eq(1, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1})); assert.eq(2, coll.getIndexes().length); -assert.commandWorked(coll.createIndex({geo: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere"})); assert.eq(2, coll.getIndexes().length); coll.drop(); @@ -175,7 +175,7 @@ var geometryCollectionDoc = { }; // {2dsphereIndexVersion: 2} indexes allow all supported GeoJSON objects. -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2}); assert.commandWorked(res); res = coll.insert(pointDoc); assert.commandWorked(res); @@ -194,7 +194,7 @@ assert.commandWorked(res); coll.drop(); // {2dsphereIndexVersion: 1} indexes allow only Point, LineString, and Polygon. -res = coll.createIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1}); +res = coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1}); assert.commandWorked(res); res = coll.insert(pointDoc); assert.commandWorked(res); diff --git a/jstests/core/geo_s2intersection.js b/jstests/core/geo_s2intersection.js index 50f26a6aa83..25479a58349 100644 --- a/jstests/core/geo_s2intersection.js +++ b/jstests/core/geo_s2intersection.js @@ -1,6 +1,6 @@ var t = db.geo_s2intersectinglines; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); /**All the tests in this file are generally confirming intersections based upon * these three geo objects. @@ -143,7 +143,7 @@ assert.eq(result[0]['name'], 'canonPoly'); // Case 12: Make sure that we properly handle and $and of two // $geoIntersects predicates. t.drop(); -t.createIndex({a: "2dsphere"}); +t.ensureIndex({a: "2dsphere"}); t.insert({a: {type: "Polygon", coordinates: [[[0, 0], [3, 6], [6, 0], [0, 0]]]}}); var firstPoint = {$geometry: {type: "Point", coordinates: [3.0, 1.0]}}; diff --git a/jstests/core/geo_s2largewithin.js b/jstests/core/geo_s2largewithin.js index 156b711bdff..4723bb4833e 100644 --- a/jstests/core/geo_s2largewithin.js +++ b/jstests/core/geo_s2largewithin.js @@ -5,7 +5,7 @@ // ] t = db.geo_s2largewithin; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); testPoint = { name: "origin", diff --git a/jstests/core/geo_s2meridian.js b/jstests/core/geo_s2meridian.js index 5842000e998..47f4fb08a6a 100644 --- a/jstests/core/geo_s2meridian.js +++ b/jstests/core/geo_s2meridian.js @@ -1,6 +1,6 @@ t = db.geo_s2meridian; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); /** * Test 1: check that intersection works on the meridian. We insert a line @@ -26,7 +26,7 @@ result = t.find({geo: {$geoIntersects: {$geometry: lineAlongMeridian}}}); assert.eq(result.itcount(), 1); t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); /* * Test 2: check that within work across the meridian. We insert points * on the meridian, and immediately on either side, and confirm that a poly @@ -55,7 +55,7 @@ result = t.find({geo: {$geoWithin: {$geometry: meridianCrossingPoly}}}); assert.eq(result.itcount(), 3); t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); /* * Test 3: Check that near works around the meridian. Insert two points, one * closer, but across the meridian, and confirm they both come back, and diff --git a/jstests/core/geo_s2multi.js b/jstests/core/geo_s2multi.js index 9f4208d51aa..28034ad8ba6 100644 --- a/jstests/core/geo_s2multi.js +++ b/jstests/core/geo_s2multi.js @@ -1,7 +1,7 @@ t = db.geo_s2multi; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); // Let's try the examples in the GeoJSON spec. // @tags: [ diff --git a/jstests/core/geo_s2near.js b/jstests/core/geo_s2near.js index 2cd1df5cbbc..c61e16927ff 100644 --- a/jstests/core/geo_s2near.js +++ b/jstests/core/geo_s2near.js @@ -14,7 +14,7 @@ goldenPoint = { coordinates: [31.0, 41.0] }; t.insert({geo: goldenPoint}); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); resNear = t.aggregate([ {$geoNear: {near: [30, 40], distanceField: "d", spherical: true, includeLocs: "loc"}}, @@ -40,7 +40,7 @@ origin = { "coordinates": [lng, lat] }; -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); // Near only works when the query is a point. someline = { diff --git a/jstests/core/geo_s2nearComplex.js b/jstests/core/geo_s2nearComplex.js index 40bc9b72445..d7f4fffabc1 100644 --- a/jstests/core/geo_s2nearComplex.js +++ b/jstests/core/geo_s2nearComplex.js @@ -6,7 +6,7 @@ var t = db.get_s2nearcomplex; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); /* Short names for math operations */ Random.setRandomSeed(); @@ -176,7 +176,7 @@ print("Total points:"); print(t.find(query).itcount()); t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); // Test a uniform distribution with 5 gaps each with 10 points missing. uniformPointsWithGaps(origin, 1000, 1, 10.0, 5, 10); @@ -188,7 +188,7 @@ print("Total points:"); print(t.find(query).itcount()); t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); // Test a uniform distribution with 5 clusters each with between 10 and 100 points. uniformPointsWithClusters(origin, 1000, 1, 10.0, 5, 10, 100); @@ -201,7 +201,7 @@ print("Total points:"); print(t.find(query).itcount()); t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); // Test a uniform near search with origin around the pole. @@ -225,7 +225,7 @@ print(t.find({geo: {$geoNear: {$geometry: originGeo}}}) assert.eq(t.find({geo: {$geoNear: {$geometry: originGeo}}}).itcount(), 50); t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); // Center point near the meridian originGeo = { @@ -247,7 +247,7 @@ print(t.find({geo: {$geoNear: {$geometry: originGeo}}}) assert.eq(t.find({geo: {$geoNear: {$geometry: originGeo}}}).itcount(), 50); t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); // Center point near the negative meridian originGeo = { @@ -270,7 +270,7 @@ assert.eq(t.find({geo: {$near: {$geometry: originGeo}}}).itcount(), 50); // Near search with points that are really far away. t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); originGeo = { type: "Point", coordinates: [0.0, 0.0] diff --git a/jstests/core/geo_s2near_equator_opposite.js b/jstests/core/geo_s2near_equator_opposite.js index 4b028baf43c..de196ea70eb 100644 --- a/jstests/core/geo_s2near_equator_opposite.js +++ b/jstests/core/geo_s2near_equator_opposite.js @@ -12,7 +12,7 @@ t.drop(); t.insert({loc: {type: 'Point', coordinates: [0, 0]}}); t.insert({loc: {type: 'Point', coordinates: [-1, 0]}}); -t.createIndex({loc: '2dsphere'}); +t.ensureIndex({loc: '2dsphere'}); // upper bound for half of earth's circumference in meters var dist = 40075000 / 2 + 1; diff --git a/jstests/core/geo_s2nearcorrect.js b/jstests/core/geo_s2nearcorrect.js index 80ece4223d2..54552a4bee5 100644 --- a/jstests/core/geo_s2nearcorrect.js +++ b/jstests/core/geo_s2nearcorrect.js @@ -10,7 +10,7 @@ longline = { "coordinates": [[0, 0], [179, 89]] }; t.insert({geo: longline}); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); origin = { "type": "Point", "coordinates": [45, 45] diff --git a/jstests/core/geo_s2nearwithin.js b/jstests/core/geo_s2nearwithin.js index eb334e89aff..8018dfec575 100644 --- a/jstests/core/geo_s2nearwithin.js +++ b/jstests/core/geo_s2nearwithin.js @@ -18,7 +18,7 @@ origin = { "coordinates": [0, 0] }; -assert.commandWorked(t.createIndex({geo: "2dsphere"})); +assert.commandWorked(t.ensureIndex({geo: "2dsphere"})); // Near requires an index, and 2dsphere is an index. Spherical isn't // specified so this doesn't work. let res = assert.commandFailedWithCode(t.runCommand("aggregate", { diff --git a/jstests/core/geo_s2nongeoarray.js b/jstests/core/geo_s2nongeoarray.js index 5fb5c59f1af..4242a9f38e9 100644 --- a/jstests/core/geo_s2nongeoarray.js +++ b/jstests/core/geo_s2nongeoarray.js @@ -11,19 +11,19 @@ var data = {geo: oldPoint, nonGeo: [123, 456], otherNonGeo: [{b: [1, 2]}, {b: [3 t.drop(); assert.commandWorked(t.insert(data)); -assert.commandWorked(t.createIndex({otherNonGeo: 1})); +assert.commandWorked(t.ensureIndex({otherNonGeo: 1})); assert.eq(1, t.find({otherNonGeo: {b: [1, 2]}}).itcount()); assert.eq(0, t.find({otherNonGeo: 1}).itcount()); assert.eq(1, t.find({'otherNonGeo.b': 1}).itcount()); t.drop(); t.insert(data); -t.createIndex({geo: "2d", nonGeo: 1, otherNonGeo: 1}); +t.ensureIndex({geo: "2d", nonGeo: 1, otherNonGeo: 1}); assert.eq(t.find({nonGeo: 123, geo: {$nearSphere: oldPoint}}).itcount(), 1); assert.eq(t.find({'otherNonGeo.b': 1, geo: {$nearSphere: oldPoint}}).itcount(), 1); t.drop(); t.insert(data); -t.createIndex({geo: "2dsphere", nonGeo: 1, otherNonGeo: 1}); +t.ensureIndex({geo: "2dsphere", nonGeo: 1, otherNonGeo: 1}); assert.eq(t.find({nonGeo: 123, geo: {$nearSphere: oldPoint}}).itcount(), 1); assert.eq(t.find({'otherNonGeo.b': 1, geo: {$nearSphere: oldPoint}}).itcount(), 1); diff --git a/jstests/core/geo_s2nonstring.js b/jstests/core/geo_s2nonstring.js index a76a7cd073e..960f0c727a8 100644 --- a/jstests/core/geo_s2nonstring.js +++ b/jstests/core/geo_s2nonstring.js @@ -2,13 +2,13 @@ t = db.geo_s2nonstring; t.drop(); -t.createIndex({geo: '2dsphere', x: 1}); +t.ensureIndex({geo: '2dsphere', x: 1}); t.save({geo: {type: 'Point', coordinates: [0, 0]}, x: 'a'}); t.save({geo: {type: 'Point', coordinates: [0, 0]}, x: 5}); t.drop(); -t.createIndex({geo: '2dsphere', x: 1}); +t.ensureIndex({geo: '2dsphere', x: 1}); t.save({geo: {type: 'Point', coordinates: [0, 0]}, x: 'a'}); t.save({geo: {type: 'Point', coordinates: [0, 0]}}); diff --git a/jstests/core/geo_s2nopoints.js b/jstests/core/geo_s2nopoints.js index 7b3a3b970a7..0d2afdb1672 100644 --- a/jstests/core/geo_s2nopoints.js +++ b/jstests/core/geo_s2nopoints.js @@ -2,7 +2,7 @@ t = db.geo_s2nopoints; t.drop(); -t.createIndex({loc: "2dsphere", x: 1}); +t.ensureIndex({loc: "2dsphere", x: 1}); assert.eq( 0, t.count({loc: {$near: {$geometry: {type: 'Point', coordinates: [0, 0]}, $maxDistance: 10}}})); diff --git a/jstests/core/geo_s2oddshapes.js b/jstests/core/geo_s2oddshapes.js index 9ebe6be7ed3..0cc60a661a4 100644 --- a/jstests/core/geo_s2oddshapes.js +++ b/jstests/core/geo_s2oddshapes.js @@ -6,7 +6,7 @@ // ] var t = db.geo_s2oddshapes; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); var testPoint = {name: "origin", geo: {type: "Point", coordinates: [0.0, 0.0]}}; @@ -58,7 +58,7 @@ assert.eq(result.itcount(), 3); // Test a poly that is the size of half the earth. t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); var insidePoint = {name: "inside", geo: {type: "Point", name: "inside", coordinates: [100.0, 0.0]}}; @@ -84,7 +84,7 @@ assert.eq(point.name, 'inside'); // Test a poly that is very small. A couple meters around. t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); insidePoint = { name: "inside", diff --git a/jstests/core/geo_s2ordering.js b/jstests/core/geo_s2ordering.js index 9e53cafb981..8ef84905b75 100644 --- a/jstests/core/geo_s2ordering.js +++ b/jstests/core/geo_s2ordering.js @@ -35,7 +35,7 @@ function makepoints(needle) { } function runTest(index) { - assert.commandWorked(coll.createIndex(index)); + assert.commandWorked(coll.ensureIndex(index)); const cursor = coll.find({nongeo: needle, geo: {$within: {$centerSphere: [[0, 0], Math.PI / 180.0]}}}); const stats = cursor.explain("executionStats").executionStats; diff --git a/jstests/core/geo_s2overlappingpolys.js b/jstests/core/geo_s2overlappingpolys.js index 3cc1f254a37..9dd7125349a 100644 --- a/jstests/core/geo_s2overlappingpolys.js +++ b/jstests/core/geo_s2overlappingpolys.js @@ -6,7 +6,7 @@ var t = db.geo_s2overlappingpolys; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); var minError = 0.8e-13; diff --git a/jstests/core/geo_s2polywithholes.js b/jstests/core/geo_s2polywithholes.js index e37606465f6..c20da5a34aa 100644 --- a/jstests/core/geo_s2polywithholes.js +++ b/jstests/core/geo_s2polywithholes.js @@ -5,7 +5,7 @@ */ var t = db.geo_s2weirdpolys; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); var centerPoint = {"type": "Point", "coordinates": [0.5, 0.5]}; var edgePoint = {"type": "Point", "coordinates": [0, 0.5]}; diff --git a/jstests/core/geo_s2selfintersectingpoly.js b/jstests/core/geo_s2selfintersectingpoly.js index 0ac522fa6f7..0887f850fe3 100644 --- a/jstests/core/geo_s2selfintersectingpoly.js +++ b/jstests/core/geo_s2selfintersectingpoly.js @@ -1,6 +1,6 @@ var t = db.geo_s2selfintersectingpoly; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); var intersectingPolygon = { "type": "Polygon", diff --git a/jstests/core/geo_s2sparse.js b/jstests/core/geo_s2sparse.js index 1a9a3b67b9b..d058afb9f9b 100644 --- a/jstests/core/geo_s2sparse.js +++ b/jstests/core/geo_s2sparse.js @@ -15,7 +15,7 @@ var indexName = 'geo_2dsphere_nonGeo_1'; // Clean up. coll.drop(); -coll.createIndex(indexSpec); +coll.ensureIndex(indexSpec); var bulkInsertDocs = function(coll, numDocs, makeDocFn) { print("Bulk inserting " + numDocs + " documents"); @@ -77,7 +77,7 @@ assert.eq(N + N, coll.validate().keysPerIndex[indexName]); // coll.drop(); -coll.createIndex(indexSpec, {"2dsphereIndexVersion": 1}); +coll.ensureIndex(indexSpec, {"2dsphereIndexVersion": 1}); // Insert N documents with the geo field. bulkInsertDocs(coll, N, function(i) { @@ -101,7 +101,7 @@ assert.eq(N + N, coll.validate().keysPerIndex[indexName]); // Clean up. coll.drop(); -coll.createIndex({geo: "2dsphere", otherGeo: "2dsphere"}); +coll.ensureIndex({geo: "2dsphere", otherGeo: "2dsphere"}); indexName = 'geo_2dsphere_otherGeo_2dsphere'; diff --git a/jstests/core/geo_s2twofields.js b/jstests/core/geo_s2twofields.js index 160b5f513e1..73666f2bf5e 100644 --- a/jstests/core/geo_s2twofields.js +++ b/jstests/core/geo_s2twofields.js @@ -55,7 +55,7 @@ function timeWithoutAndWithAnIndex(index, query) { var withoutTime = semiRigorousTime(function() { return t.find(query).explain("executionStats").executionStats.executionTimeMillis; }); - t.createIndex(index); + t.ensureIndex(index); var withTime = semiRigorousTime(function() { return t.find(query).explain("executionStats").executionStats.executionTimeMillis; }); diff --git a/jstests/core/geo_s2validindex.js b/jstests/core/geo_s2validindex.js index 444346def14..4c024d2d585 100644 --- a/jstests/core/geo_s2validindex.js +++ b/jstests/core/geo_s2validindex.js @@ -6,19 +6,19 @@ var coll = db.getCollection("twodspherevalid"); // Valid index coll.drop(); -assert.commandWorked(coll.createIndex({geo: "2dsphere", other: 1})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere", other: 1})); // Valid index coll.drop(); -assert.commandWorked(coll.createIndex({geo: "2dsphere", other: 1, geo2: "2dsphere"})); +assert.commandWorked(coll.ensureIndex({geo: "2dsphere", other: 1, geo2: "2dsphere"})); // Invalid index, using hash with 2dsphere coll.drop(); -assert.commandFailed(coll.createIndex({geo: "2dsphere", other: "hash"})); +assert.commandFailed(coll.ensureIndex({geo: "2dsphere", other: "hash"})); // Invalid index, using 2d with 2dsphere coll.drop(); -assert.commandFailed(coll.createIndex({geo: "2dsphere", other: "2d"})); +assert.commandFailed(coll.ensureIndex({geo: "2dsphere", other: "2d"})); jsTest.log("Success!"); diff --git a/jstests/core/geo_s2within.js b/jstests/core/geo_s2within.js index 4f908a4f303..c32eb4fd612 100644 --- a/jstests/core/geo_s2within.js +++ b/jstests/core/geo_s2within.js @@ -4,7 +4,7 @@ // ] t = db.geo_s2within; t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); somepoly = { "type": "Polygon", @@ -19,7 +19,7 @@ res = t.find({"geo": {"$within": {"$geometry": somepoly}}}); assert.eq(res.itcount(), 1); t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); somepoly = { "type": "Polygon", "coordinates": [ diff --git a/jstests/core/geo_small_large.js b/jstests/core/geo_small_large.js index 94d5298081e..5cfa3e68e0f 100644 --- a/jstests/core/geo_small_large.js +++ b/jstests/core/geo_small_large.js @@ -56,7 +56,7 @@ for (var i = 0; i < scales.length; i++) { var t = db["geo_small_large"]; t.drop(); - t.createIndex({p: "2d"}, {min: min, max: max, bits: bits}); + t.ensureIndex({p: "2d"}, {min: min, max: max, bits: bits}); var outPoints = 0; var inPoints = 0; diff --git a/jstests/core/geo_sort1.js b/jstests/core/geo_sort1.js index 3e9ee494812..22e185d0106 100644 --- a/jstests/core/geo_sort1.js +++ b/jstests/core/geo_sort1.js @@ -12,7 +12,7 @@ for (x = 0; x < 10; x++) { } } -t.createIndex({loc: "2d", foo: 1}); +t.ensureIndex({loc: "2d", foo: 1}); q = t.find({loc: {$near: [5, 5]}, foo: {$gt: 20}}); m = function(z) { diff --git a/jstests/core/geo_uniqueDocs.js b/jstests/core/geo_uniqueDocs.js index b6eaf4e0501..88162e42498 100644 --- a/jstests/core/geo_uniqueDocs.js +++ b/jstests/core/geo_uniqueDocs.js @@ -11,7 +11,7 @@ t.drop(); assert.commandWorked(t.save({locs: [[0, 2], [3, 4]]})); assert.commandWorked(t.save({locs: [[6, 8], [10, 10]]})); -assert.commandWorked(t.createIndex({locs: '2d'})); +assert.commandWorked(t.ensureIndex({locs: '2d'})); // $geoNear tests // uniqueDocs option is ignored. diff --git a/jstests/core/geo_uniqueDocs2.js b/jstests/core/geo_uniqueDocs2.js index 1486023b73f..9e0b4a0a284 100644 --- a/jstests/core/geo_uniqueDocs2.js +++ b/jstests/core/geo_uniqueDocs2.js @@ -12,7 +12,7 @@ t = db[collName]; t.drop(); t.save({loc: [[20, 30], [40, 50]]}); -t.createIndex({loc: '2d'}); +t.ensureIndex({loc: '2d'}); // Check exact matches of different locations. assert.eq(1, t.count({loc: [20, 30]})); @@ -109,5 +109,5 @@ for (i = 0; i < 10000; ++i) { } arr.push([100, 100]); t.save({loc: arr}); -t.createIndex({loc: '2d'}); +t.ensureIndex({loc: '2d'}); assert.eq(1, t.count({loc: {$within: {$center: [[99, 99], 5]}}})); diff --git a/jstests/core/geo_update.js b/jstests/core/geo_update.js index 015e56e34a5..21cf42d2208 100644 --- a/jstests/core/geo_update.js +++ b/jstests/core/geo_update.js @@ -11,7 +11,7 @@ var coll = db.testGeoUpdate; coll.drop(); -coll.createIndex({loc: "2d"}); +coll.ensureIndex({loc: "2d"}); // Test normal update print("Updating..."); diff --git a/jstests/core/geo_update1.js b/jstests/core/geo_update1.js index cd23e65b7b7..a4de04fbd93 100644 --- a/jstests/core/geo_update1.js +++ b/jstests/core/geo_update1.js @@ -11,7 +11,7 @@ for (var x = 0; x < 10; x++) { } } -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); function p() { print("--------------"); diff --git a/jstests/core/geo_update2.js b/jstests/core/geo_update2.js index d67b3a9bcc1..f1b94925cb7 100644 --- a/jstests/core/geo_update2.js +++ b/jstests/core/geo_update2.js @@ -11,7 +11,7 @@ for (var x = 0; x < 10; x++) { } } -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); function p() { print("--------------"); diff --git a/jstests/core/geo_update_btree.js b/jstests/core/geo_update_btree.js index 7a58362fe18..8cf711a9e48 100644 --- a/jstests/core/geo_update_btree.js +++ b/jstests/core/geo_update_btree.js @@ -10,7 +10,7 @@ var coll = db.getCollection("jstests_geo_update_btree"); coll.drop(); -coll.createIndex({loc: '2d'}); +coll.ensureIndex({loc: '2d'}); var big = new Array(3000).toString(); diff --git a/jstests/core/geo_update_btree2.js b/jstests/core/geo_update_btree2.js index e37dbb190e1..3bc0a7c9760 100644 --- a/jstests/core/geo_update_btree2.js +++ b/jstests/core/geo_update_btree2.js @@ -28,7 +28,7 @@ var status = function(msg) { var coll = db.getCollection("jstests_geo_update_btree2"); coll.drop(); -coll.createIndex({loc: '2d'}); +coll.ensureIndex({loc: '2d'}); status("Inserting points..."); diff --git a/jstests/core/geo_update_dedup.js b/jstests/core/geo_update_dedup.js index 3938204c70e..34e9aff30dd 100644 --- a/jstests/core/geo_update_dedup.js +++ b/jstests/core/geo_update_dedup.js @@ -13,7 +13,7 @@ var t = db.jstests_geo_update_dedup; // 2d index with $near t.drop(); -t.createIndex({locs: "2d"}); +t.ensureIndex({locs: "2d"}); t.save({locs: [[49.999, 49.999], [50.0, 50.0], [50.001, 50.001]]}); var q = {locs: {$near: [50.0, 50.0]}}; @@ -24,7 +24,7 @@ assert.eq(1, res.nMatched); assert.eq(1, t.findOne().touchCount); t.drop(); -t.createIndex({locs: "2d"}); +t.ensureIndex({locs: "2d"}); t.save({locs: [{x: 49.999, y: 49.999}, {x: 50.0, y: 50.0}, {x: 50.001, y: 50.001}]}); res = t.update({locs: {$near: {x: 50.0, y: 50.0}}}, {$inc: {touchCount: 1}}); assert.eq(1, res.nMatched); @@ -32,7 +32,7 @@ assert.eq(1, t.findOne().touchCount); // 2d index with $within t.drop(); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); t.save({loc: [[0, 0], [1, 1]]}); res = t.update({loc: {$within: {$center: [[0, 0], 2]}}}, {$inc: {touchCount: 1}}, false, true); @@ -41,7 +41,7 @@ assert.eq(1, t.findOne().touchCount); // 2dsphere index with $geoNear t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); var x = { "type": "Polygon", "coordinates": [[[49.999, 49.999], [50.0, 50.0], [50.001, 50.001], [49.999, 49.999]]] @@ -62,7 +62,7 @@ var locdata = [ {geo: {type: "Point", coordinates: [50.001, 50.001]}} ]; t.save({locdata: locdata, count: 0}); -t.createIndex({"locdata.geo": "2dsphere"}); +t.ensureIndex({"locdata.geo": "2dsphere"}); res = t.update({"locdata.geo": {$geoNear: {"type": "Point", "coordinates": [50.0, 50.0]}}}, {$inc: {touchCount: 1}}, diff --git a/jstests/core/geo_validate.js b/jstests/core/geo_validate.js index 0518740c02e..cd839ef8f97 100644 --- a/jstests/core/geo_validate.js +++ b/jstests/core/geo_validate.js @@ -8,7 +8,7 @@ var coll = db.geo_validate; coll.drop(); -coll.createIndex({geo: "2dsphere"}); +coll.ensureIndex({geo: "2dsphere"}); // // diff --git a/jstests/core/geoa.js b/jstests/core/geoa.js index 52a9d79db3b..c1e0a2f796a 100644 --- a/jstests/core/geoa.js +++ b/jstests/core/geoa.js @@ -10,7 +10,7 @@ t.save({_id: 1, a: {loc: [5, 5]}}); t.save({_id: 2, a: {loc: [6, 6]}}); t.save({_id: 3, a: {loc: [7, 7]}}); -t.createIndex({"a.loc": "2d"}); +t.ensureIndex({"a.loc": "2d"}); cur = t.find({"a.loc": {$near: [6, 6]}}); assert.eq(2, cur.next()._id, "A1"); diff --git a/jstests/core/geob.js b/jstests/core/geob.js index b1093172618..6a7839253ee 100644 --- a/jstests/core/geob.js +++ b/jstests/core/geob.js @@ -17,7 +17,7 @@ t.save(a); t.save(b); t.save(c); t.save(d); -t.createIndex({p: "2d"}); +t.ensureIndex({p: "2d"}); let res = t.aggregate({$geoNear: {near: [0, 0], distanceField: "dis"}}).toArray(); diff --git a/jstests/core/geoc.js b/jstests/core/geoc.js index 2c0948582c7..4264b6f9295 100644 --- a/jstests/core/geoc.js +++ b/jstests/core/geoc.js @@ -15,7 +15,7 @@ for (var i = 0; i < N; i++) for (var i = 0; i < N; i++) t.insert({loc: [-100 + Math.random(), -100 + Math.random()], z: 2}); -t.createIndex({loc: '2d'}); +t.ensureIndex({loc: '2d'}); function test(z, l) { assert.lt( diff --git a/jstests/core/geod.js b/jstests/core/geod.js index 47b067809f8..fc6c37f1da3 100644 --- a/jstests/core/geod.js +++ b/jstests/core/geod.js @@ -2,7 +2,7 @@ var t = db.geod; t.drop(); t.save({loc: [0, 0]}); t.save({loc: [0.5, 0]}); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); // do a few geoNears with different maxDistances. The first iteration // should match no points in the dataset. // @tags: [ diff --git a/jstests/core/geoe.js b/jstests/core/geoe.js index 84bc34f7a74..9568e13dc08 100644 --- a/jstests/core/geoe.js +++ b/jstests/core/geoe.js @@ -22,7 +22,7 @@ t.insert({"_id": 12, "geo": [-122.3, 37.66]}); t.insert({"_id": 13, "geo": [-122.2435, 37.637072]}); t.insert({"_id": 14, "geo": [-122.289505, 37.695774]}); -t.createIndex({geo: "2d"}); +t.ensureIndex({geo: "2d"}); c = t.find({geo: {"$within": {"$box": [[-125.078461, 36.494473], [-120.320648, 38.905199]]}}}); assert.eq(11, c.count(), "A1"); diff --git a/jstests/core/geof.js b/jstests/core/geof.js index 31e5439b158..ad15037db3b 100644 --- a/jstests/core/geof.js +++ b/jstests/core/geof.js @@ -14,7 +14,7 @@ t.insert({loc: [-0.7, -0.7]}); t.insert({loc: [-0.9, 0]}); t.insert({loc: [-0.9, 0]}); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); t.find({loc: {$near: [0, 0]}}).limit(2).forEach(function(o) { // printjson(o); diff --git a/jstests/core/geonear_cmd_input_validation.js b/jstests/core/geonear_cmd_input_validation.js index 04f5e73fed0..2c3116c3a6d 100644 --- a/jstests/core/geonear_cmd_input_validation.js +++ b/jstests/core/geonear_cmd_input_validation.js @@ -6,7 +6,7 @@ // ] var t = db.geonear_cmd_input_validation; t.drop(); -t.createIndex({loc: "2dsphere"}); +t.ensureIndex({loc: "2dsphere"}); // The test matrix. Some combinations are not supported: // 2d index and GeoJSON. diff --git a/jstests/core/getmore_invalidated_documents.js b/jstests/core/getmore_invalidated_documents.js index 4fc66fca5c8..3bc5458072e 100644 --- a/jstests/core/getmore_invalidated_documents.js +++ b/jstests/core/getmore_invalidated_documents.js @@ -23,7 +23,7 @@ var y; // Case #1: Text search with deletion invalidation. t.drop(); -assert.commandWorked(t.createIndex({a: "text"})); +assert.commandWorked(t.ensureIndex({a: "text"})); assert.commandWorked(t.insert({_id: 1, a: "bar"})); assert.commandWorked(t.insert({_id: 2, a: "bar"})); assert.commandWorked(t.insert({_id: 3, a: "bar"})); @@ -41,7 +41,7 @@ assert(count === 0 || count === 1); // Case #2: Text search with mutation invalidation. t.drop(); -assert.commandWorked(t.createIndex({a: "text"})); +assert.commandWorked(t.ensureIndex({a: "text"})); assert.commandWorked(t.insert({_id: 1, a: "bar"})); assert.commandWorked(t.insert({_id: 2, a: "bar"})); assert.commandWorked(t.insert({_id: 3, a: "bar"})); @@ -60,7 +60,7 @@ assert(!cursor.hasNext() || cursor.next()["a"] === "bar"); // Case #3: Merge sort with deletion invalidation. t.drop(); -assert.commandWorked(t.createIndex({a: 1, b: 1})); +assert.commandWorked(t.ensureIndex({a: 1, b: 1})); assert.commandWorked(t.insert({a: 1, b: 1})); assert.commandWorked(t.insert({a: 1, b: 2})); assert.commandWorked(t.insert({a: 2, b: 3})); @@ -77,7 +77,7 @@ assert(count === 1 || count === 2); // Case #4: Merge sort with mutation invalidation. t.drop(); -assert.commandWorked(t.createIndex({a: 1, b: 1})); +assert.commandWorked(t.ensureIndex({a: 1, b: 1})); assert.commandWorked(t.insert({a: 1, b: 1})); assert.commandWorked(t.insert({a: 1, b: 2})); assert.commandWorked(t.insert({a: 2, b: 3})); @@ -101,7 +101,7 @@ assert(!cursor.hasNext()); // Case #5: 2d near with deletion invalidation. t.drop(); -t.createIndex({geo: "2d"}); +t.ensureIndex({geo: "2d"}); for (x = -1; x < 1; x++) { for (y = -1; y < 1; y++) { assert.commandWorked(t.insert({geo: [x, y]})); @@ -121,7 +121,7 @@ assert(cursor.hasNext()); // Case #6: 2dsphere near with deletion invalidation. t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); for (x = -1; x < 1; x++) { for (y = -1; y < 1; y++) { assert.commandWorked(t.insert({geo: [x, y]})); @@ -141,7 +141,7 @@ assert(cursor.hasNext()); // Case #7: 2dsphere near with deletion invalidation (again). t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); for (x = 0; x < 6; x++) { assert.commandWorked(t.insert({geo: [x, x]})); } @@ -159,7 +159,7 @@ assert.gte(cursor.itcount(), 0); // Case #8: 2d near with mutation invalidation. t.drop(); -t.createIndex({geo: "2d"}); +t.ensureIndex({geo: "2d"}); for (x = -1; x < 1; x++) { for (y = -1; y < 1; y++) { assert.commandWorked(t.insert({geo: [x, y]})); @@ -182,7 +182,7 @@ assert(nextDoc.geo[0] === 0 || nextDoc.geo[1] === 0); // Case #9: 2dsphere near with mutation invalidation. t.drop(); -t.createIndex({geo: "2dsphere"}); +t.ensureIndex({geo: "2dsphere"}); for (x = -1; x < 1; x++) { for (y = -1; y < 1; y++) { assert.commandWorked(t.insert({geo: [x, y]})); @@ -205,7 +205,7 @@ assert(nextDoc.geo[0] === 0 || nextDoc.geo[1] === 0); // Case #10: sort with deletion invalidation. t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.insert({a: 1, b: 2}); t.insert({a: 3, b: 3}); t.insert({a: 2, b: 1}); @@ -222,7 +222,7 @@ if (cursor.hasNext()) { // Case #11: sort with mutation invalidation. t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.insert({a: 1, b: 2}); t.insert({a: 3, b: 3}); t.insert({a: 2, b: 1}); diff --git a/jstests/core/hint1.js b/jstests/core/hint1.js index d584144e641..6542f9752bc 100644 --- a/jstests/core/hint1.js +++ b/jstests/core/hint1.js @@ -2,7 +2,7 @@ p = db.jstests_hint1; p.drop(); p.save({ts: new Date(1), cls: "entry", verticals: "alleyinsider", live: true}); -p.createIndex({ts: 1}); +p.ensureIndex({ts: 1}); assert.eq( 1, diff --git a/jstests/core/idhack.js b/jstests/core/idhack.js index 83a359f0f53..a884fecd920 100644 --- a/jstests/core/idhack.js +++ b/jstests/core/idhack.js @@ -41,7 +41,7 @@ assert.eq(1, explain.executionStats.totalKeysExamined); assert(isIdhack(db, explain.queryPlanner.winningPlan)); // ID hack cannot be used with hint(). -t.createIndex({_id: 1, a: 1}); +t.ensureIndex({_id: 1, a: 1}); explain = t.find(query).hint({_id: 1, a: 1}).explain(); assert(!isIdhack(db, explain.queryPlanner.winningPlan)); diff --git a/jstests/core/in.js b/jstests/core/in.js index ca8cd77b189..852f6bcbca4 100644 --- a/jstests/core/in.js +++ b/jstests/core/in.js @@ -17,7 +17,7 @@ assert.eq(1, t.find({a: {$in: [1]}}).itcount(), "A"); assert.eq(1, t.find({a: {$in: [2]}}).itcount(), "B"); assert.eq(2, t.find({a: {$in: [1, 2]}}).itcount(), "C"); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(1, t.find({a: {$in: [1]}}).itcount(), "D"); assert.eq(1, t.find({a: {$in: [2]}}).itcount(), "E"); diff --git a/jstests/core/in2.js b/jstests/core/in2.js index 6682bbc79c1..ddcee67ccd0 100644 --- a/jstests/core/in2.js +++ b/jstests/core/in2.js @@ -17,7 +17,7 @@ function go(name, index) { t.save({a: 3, b: 1}); if (index) - t.createIndex(index); + t.ensureIndex(index); assert.eq(7, t.find({a: {$in: [1, 2]}}).count(), name + " A"); diff --git a/jstests/core/in3.js b/jstests/core/in3.js index bd64329ded4..02680642939 100644 --- a/jstests/core/in3.js +++ b/jstests/core/in3.js @@ -19,5 +19,5 @@ function doTest() { } doTest(); -t.createIndex({key: 1}); +t.ensureIndex({key: 1}); doTest(); diff --git a/jstests/core/in4.js b/jstests/core/in4.js index e916ca7c82d..df9eea2577b 100644 --- a/jstests/core/in4.js +++ b/jstests/core/in4.js @@ -33,5 +33,5 @@ function doTest() { doTest(); // SERVER-1943 not fixed yet -t.createIndex({key: 1}); +t.ensureIndex({key: 1}); doTest(); diff --git a/jstests/core/in5.js b/jstests/core/in5.js index 80f37e6b473..2f92b057d6c 100644 --- a/jstests/core/in5.js +++ b/jstests/core/in5.js @@ -27,7 +27,7 @@ function go(fn) { i = {}; i[fn] = 1; - t.createIndex(i); + t.ensureIndex(i); assert.eq(1, t.find(x).itcount(), "B1 - " + fn); assert.eq(1, t.find(y).itcount(), "B2 - " + fn); @@ -39,7 +39,7 @@ function go(fn) { i = {}; i[fn + ".a"] = 1; - t.createIndex(i); + t.ensureIndex(i); assert.eq(2, t.getIndexes().length, "T3"); assert.eq(1, t.find(x).itcount(), "C1 - " + fn); diff --git a/jstests/core/in6.js b/jstests/core/in6.js index ab8322cfe0a..4ee06541b81 100644 --- a/jstests/core/in6.js +++ b/jstests/core/in6.js @@ -9,5 +9,5 @@ function doTest() { } doTest(); -t.createIndex({i: 1}); +t.ensureIndex({i: 1}); doTest(); diff --git a/jstests/core/in8.js b/jstests/core/in8.js index f1b6188347c..a6bdc520926 100644 --- a/jstests/core/in8.js +++ b/jstests/core/in8.js @@ -8,7 +8,7 @@ function checkResults(query) { assert.eq(4, t.find(query).itcount()); } -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); t.save({x: 'aa'}); t.save({x: 'ab'}); t.save({x: 'ac'}); diff --git a/jstests/core/inc1.js b/jstests/core/inc1.js index 551d15e0f63..50a7892e5a4 100644 --- a/jstests/core/inc1.js +++ b/jstests/core/inc1.js @@ -26,7 +26,7 @@ test(5, "E"); t.update({_id: 1}, {$inc: {x: -1}}); test(4, "F"); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); t.update({_id: 1}, {$inc: {x: 1}}); test(5, "G"); diff --git a/jstests/core/inc2.js b/jstests/core/inc2.js index debdfde82cb..6ff4842e254 100644 --- a/jstests/core/inc2.js +++ b/jstests/core/inc2.js @@ -17,7 +17,7 @@ assert.eq("1,2,3", order(), "A"); t.update({_id: 1}, {$inc: {x: 4}}); assert.eq("2,3,1", order(), "B"); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq("2,3,1", order(), "C"); t.update({_id: 3}, {$inc: {x: 4}}); diff --git a/jstests/core/index1.js b/jstests/core/index1.js index 4c06bfe03fd..2efb9d22189 100644 --- a/jstests/core/index1.js +++ b/jstests/core/index1.js @@ -13,7 +13,7 @@ t.save(o); assert(t.findOne().z.a == 17); assert(t.findOne({z: {a: 17}}) == null); -t.createIndex({"z.a": 1}); +t.ensureIndex({"z.a": 1}); assert(t.findOne().z.a == 17); assert(t.findOne({z: {a: 17}}) == null); diff --git a/jstests/core/index13.js b/jstests/core/index13.js index 97a3a85f773..9979116ae51 100644 --- a/jstests/core/index13.js +++ b/jstests/core/index13.js @@ -40,7 +40,7 @@ index = { 'a.b': 1, 'a.c': 1 }; -t.createIndex(index); +t.ensureIndex(index); t.save({a: [{b: 1}, {c: 1}]}); t.save({a: [{b: 1, c: 1}]}); assert.eq(2, t.count()); @@ -68,7 +68,7 @@ index = { 'd.e': 1, 'd.f': 1 }; -t.createIndex(index); +t.ensureIndex(index); t.insert({a: [{b: 1}, {c: 1}], d: {e: 1, f: 1}}); t.insert({a: [{b: 1, c: 1}], d: {e: 1, f: 1}}); t.insert({a: {b: 1, c: 1}, d: [{e: 1, f: 1}]}); @@ -89,7 +89,7 @@ index = { 'a.b.c': 1, 'a.b.d': 1 }; -t.createIndex(index); +t.ensureIndex(index); t.insert({a: [{b: [{c: 1, d: 1}]}]}); t.insert({a: [{b: [{c: 1}, {d: 1}]}]}); assert.eq(2, t.count()); @@ -104,7 +104,7 @@ index = { 'a.b.x': 1, 'a.b.y': 1 }; -t.createIndex(index); +t.ensureIndex(index); t.save({a: {b: {x: 1, y: 1}}}); t.save({a: [{b: {x: 1}}, {b: {y: 1}}]}); t.save({a: [{b: [{x: 1}, {y: 1}]}]}); @@ -125,7 +125,7 @@ index = { 'a.b.x': 1, 'a.b.y': 1 }; -t.createIndex(index); +t.ensureIndex(index); // With $ne. assertResults({a: {$ne: 4}, 'a.b': {$elemMatch: {x: 1, y: 1}}}); @@ -141,7 +141,7 @@ index = { 'a.b.d': 1, 'a.e.g': 1 }; -t.createIndex(index); +t.ensureIndex(index); t.save({a: {b: {c: 1, d: 1}, e: {f: 1, g: 1}}}); t.save({a: [{b: {c: 1}, e: {f: 1}}, {b: {d: 1}, e: {g: 1}}]}); t.save({a: [{b: {c: 1}}, {e: {f: 1}}, {b: {d: 1}}, {e: {g: 1}}]}); @@ -166,7 +166,7 @@ index = { 'a.b.d': 1, 'a.e.d': 1 }; -t.createIndex(index); +t.ensureIndex(index); t.save({a: [{b: [{c: 1, d: 1}]}, {e: [{c: 1, d: 1}]}]}); assert.eq(1, t.count()); diff --git a/jstests/core/index2.js b/jstests/core/index2.js index 2c37c48c871..098bdc20529 100644 --- a/jstests/core/index2.js +++ b/jstests/core/index2.js @@ -40,7 +40,7 @@ assert(t.findOne({z: {a: 17}}).z.a == 17); assert(t.find({z: {a: 17}}).length() == 2); assert(t.find({z: {a: 18}}).length() == 1); -t.createIndex({z: 1}); +t.ensureIndex({z: 1}); assert(t.findOne({z: {a: 17}}).z.a == 17); assert(t.find({z: {a: 17}}).length() == 2); diff --git a/jstests/core/index3.js b/jstests/core/index3.js index cc5ad3b0796..6ae7c4b82dd 100644 --- a/jstests/core/index3.js +++ b/jstests/core/index3.js @@ -7,11 +7,11 @@ t.drop(); assert(t.getIndexes().length == 0); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); t.save({name: "a"}); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); assert(t.getIndexes().length == 2); diff --git a/jstests/core/index4.js b/jstests/core/index4.js index 179bcdd9726..37ebce75a9c 100644 --- a/jstests/core/index4.js +++ b/jstests/core/index4.js @@ -14,10 +14,10 @@ t.save({name: "alleyinsider", instances: [{pool: "prod1"}, {pool: "dev1"}]}); t.save({name: "clusterstock", instances: [{pool: "dev1"}]}); // this should fail, not allowed -- we confirm that. -t.createIndex({instances: {pool: 1}}); +t.ensureIndex({instances: {pool: 1}}); assert.eq(1, t.getIndexes().length, "no indexes other than _id should be here yet"); -t.createIndex({"instances.pool": 1}); +t.ensureIndex({"instances.pool": 1}); sleep(10); diff --git a/jstests/core/index5.js b/jstests/core/index5.js index 908b433c299..f46654c6602 100644 --- a/jstests/core/index5.js +++ b/jstests/core/index5.js @@ -22,5 +22,5 @@ t.save({a: 2}); validate(); -t.createIndex({a: -1}); +t.ensureIndex({a: -1}); validate(); diff --git a/jstests/core/index6.js b/jstests/core/index6.js index 4626e9359ea..9adef9bf366 100644 --- a/jstests/core/index6.js +++ b/jstests/core/index6.js @@ -4,5 +4,5 @@ r = db.ed.db.index6; r.drop(); r.save({comments: [{name: "eliot", foo: 1}]}); -r.createIndex({"comments.name": 1}); +r.ensureIndex({"comments.name": 1}); assert(r.findOne({"comments.name": "eliot"})); diff --git a/jstests/core/index8.js b/jstests/core/index8.js index 55ba8b805c9..5bae0bc6de2 100644 --- a/jstests/core/index8.js +++ b/jstests/core/index8.js @@ -8,9 +8,9 @@ t = db.jstests_index8; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}, true); -t.createIndex({c: 1}, [false, "cIndex"]); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}, true); +t.ensureIndex({c: 1}, [false, "cIndex"]); checkIndexes = function(num) { const indexes = t.getIndexes(); @@ -47,7 +47,7 @@ assert.eq(3, t.find().hint({b: 1}).toArray().length); assert.eq(3, t.find().hint({a: 1}).toArray().length); t.drop(); -t.createIndex({a: 1, b: -1}, true); +t.ensureIndex({a: 1, b: -1}, true); t.save({a: 2, b: 3}); t.save({a: 2, b: 3}); t.save({a: 2, b: 4}); @@ -55,13 +55,13 @@ t.save({a: 1, b: 3}); assert.eq(3, t.find().count()); t.drop(); -t.createIndex({a: 1}, true); +t.ensureIndex({a: 1}, true); t.save({a: [2, 3]}); t.save({a: 2}); assert.eq(1, t.find().count()); t.drop(); -t.createIndex({a: 1}, true); +t.ensureIndex({a: 1}, true); t.save({a: 2}); t.save({a: [1, 2, 3]}); t.save({a: [3, 2, 1]}); diff --git a/jstests/core/index_arr1.js b/jstests/core/index_arr1.js index d6db3e621cd..cc6f1683bd1 100644 --- a/jstests/core/index_arr1.js +++ b/jstests/core/index_arr1.js @@ -11,11 +11,11 @@ t.insert({_id: 3, a: 5}); assert.eq(3, t.find({a: 5}).itcount(), "A1"); -t.createIndex({a: 1, "b.x": 1}); +t.ensureIndex({a: 1, "b.x": 1}); assert.eq(3, t.find({a: 5}).itcount(), "A2"); // SERVER-1082 assert.eq(2, t.getIndexes().length, "B1"); t.insert({_id: 4, a: 5, b: []}); -t.createIndex({a: 1, "b.a": 1, "b.c": 1}); +t.ensureIndex({a: 1, "b.a": 1, "b.c": 1}); assert.eq(3, t.getIndexes().length, "B2"); diff --git a/jstests/core/index_arr2.js b/jstests/core/index_arr2.js index faca8be6337..cd0df2533d3 100644 --- a/jstests/core/index_arr2.js +++ b/jstests/core/index_arr2.js @@ -24,9 +24,9 @@ function test(withIndex) { Z = t.find(query).count(); if (withIndex) { - // t.createIndex( { 'a.b.c' : 1, 'created' : -1 } ) - // t.createIndex( { created : -1 } ) - t.createIndex({'a.b.c': 1}, {name: "x"}); + // t.ensureIndex( { 'a.b.c' : 1, 'created' : -1 } ) + // t.ensureIndex( { created : -1 } ) + t.ensureIndex({'a.b.c': 1}, {name: "x"}); } var res = t.update(query, {'$set': {"a.0.b.c": 0}}, false, true); diff --git a/jstests/core/index_bounds_number_edge_cases.js b/jstests/core/index_bounds_number_edge_cases.js index 3da4e53e2d0..0ab482028ed 100644 --- a/jstests/core/index_bounds_number_edge_cases.js +++ b/jstests/core/index_bounds_number_edge_cases.js @@ -6,7 +6,7 @@ t = db.indexboundsnumberedgecases; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: -Infinity}); t.save({a: -Number.MAX_VALUE}); diff --git a/jstests/core/index_check2.js b/jstests/core/index_check2.js index 216ca7fb283..8feeb7d42a8 100644 --- a/jstests/core/index_check2.js +++ b/jstests/core/index_check2.js @@ -32,7 +32,7 @@ assert.eq(120, t.find(q1).itcount(), "q1 a"); assert.eq(120, t.find(q2).itcount(), "q2 a"); assert.eq(60, t.find(q3).itcount(), "q3 a"); -t.createIndex({tags: 1}); +t.ensureIndex({tags: 1}); assert.eq(120, t.find(q1).itcount(), "q1 a"); assert.eq(120, t.find(q2).itcount(), "q2 a"); diff --git a/jstests/core/index_check3.js b/jstests/core/index_check3.js index da472ecb0c9..306b7415592 100644 --- a/jstests/core/index_check3.js +++ b/jstests/core/index_check3.js @@ -14,7 +14,7 @@ t.save({a: "z"}); assert.eq(1, t.find({a: {$lt: 2}}).itcount(), "A"); assert.eq(1, t.find({a: {$gt: 2}}).itcount(), "B"); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(1, t.find({a: {$lt: 2}}).itcount(), "C"); assert.eq(1, t.find({a: {$gt: 2}}).itcount(), "D"); @@ -28,7 +28,7 @@ for (var i = 0; i < 100; i++) { t.save(o); } -t.createIndex({foo: 1}); +t.ensureIndex({foo: 1}); var explain = t.find({foo: {$lt: 50}}).explain("executionStats"); assert.gt(30, explain.executionStats.totalKeysExamined, "lt"); @@ -41,7 +41,7 @@ for (var i = 0; i < 10; ++i) { t.save({}); } -t.createIndex({i: 1}); +t.ensureIndex({i: 1}); var explain = t.find({i: {$lte: 'a'}}).explain("executionStats"); assert.gt(3, explain.executionStats.totalKeysExamined, "lte"); diff --git a/jstests/core/index_check5.js b/jstests/core/index_check5.js index 8921e014fcd..2a3e73f9e8d 100644 --- a/jstests/core/index_check5.js +++ b/jstests/core/index_check5.js @@ -14,5 +14,5 @@ t.save({ }); assert.eq(2, t.find({"scores.level": 2, "scores.score": {$gt: 30}}).itcount(), "A"); -t.createIndex({"scores.level": 1, "scores.score": 1}); +t.ensureIndex({"scores.level": 1, "scores.score": 1}); assert.eq(2, t.find({"scores.level": 2, "scores.score": {$gt: 30}}).itcount(), "B"); diff --git a/jstests/core/index_check6.js b/jstests/core/index_check6.js index 646d64540cf..20310d2b0dd 100644 --- a/jstests/core/index_check6.js +++ b/jstests/core/index_check6.js @@ -12,7 +12,7 @@ function keysExamined(query, hint) { return explain.executionStats.totalKeysExamined; } -t.createIndex({age: 1, rating: 1}); +t.ensureIndex({age: 1, rating: 1}); for (var age = 10; age < 50; age++) { for (var rating = 0; rating < 10; rating++) { @@ -98,7 +98,7 @@ for (var a = -1; a <= 1; a += 2) { for (var c = -1; c <= 1; c += 2) { t.dropIndexes(); var spec = {a: a, b: b, c: c}; - t.createIndex(spec); + t.ensureIndex(spec); doTest(spec, spec); doTest({a: -a, b: -b, c: -c}, spec); } diff --git a/jstests/core/index_check7.js b/jstests/core/index_check7.js index 4a4ac2a0aa1..ae7ae7c9c71 100644 --- a/jstests/core/index_check7.js +++ b/jstests/core/index_check7.js @@ -9,10 +9,10 @@ t.drop(); for (var i = 0; i < 100; i++) t.save({x: i}); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq(1, t.find({x: 27}).explain(true).executionStats.totalKeysExamined, "A"); -t.createIndex({x: -1}); +t.ensureIndex({x: -1}); assert.eq(1, t.find({x: 27}).explain(true).executionStats.totalKeysExamined, "B"); assert.eq(40, t.find({x: {$gt: 59}}).explain(true).executionStats.totalKeysExamined, "C"); diff --git a/jstests/core/index_diag.js b/jstests/core/index_diag.js index 86f90c8d15c..b336e5cc141 100644 --- a/jstests/core/index_diag.js +++ b/jstests/core/index_diag.js @@ -49,7 +49,7 @@ if (FixtureHelpers.numberOfShardsForCollection(t) === 1) { assert.commandWorked(t.createIndex({_id: 1, x: 1})); assert.eq(all, t.find().hint({_id: 1, x: 1}).returnKey().toArray()); } -assert.commandWorked(t.createIndex({_id: 1, x: 1})); +assert.commandWorked(t.ensureIndex({_id: 1, x: 1})); assert.eq(r(all), t.find().hint({_id: 1, x: 1}).sort({x: 1}).returnKey().toArray()); assert.eq([{}, {}, {}], t.find().hint({$natural: 1}).returnKey().toArray()); diff --git a/jstests/core/index_dropdups_ignore.js b/jstests/core/index_dropdups_ignore.js index 0cc45d65648..aabea228c26 100644 --- a/jstests/core/index_dropdups_ignore.js +++ b/jstests/core/index_dropdups_ignore.js @@ -11,13 +11,13 @@ t.insert({_id: 1, a: 'dup'}); t.insert({_id: 2, a: 'dup'}); // Should fail with a dup-key error even though dropDups is true; -var res = t.createIndex({a: 1}, {unique: true, dropDups: true}); +var res = t.ensureIndex({a: 1}, {unique: true, dropDups: true}); assert.commandFailed(res); assert.eq(res.code, 11000, tojson(res)); // Succeeds with the dup manually removed. t.remove({_id: 2}); -var res = t.createIndex({a: 1}, {unique: true, dropDups: true}); +var res = t.ensureIndex({a: 1}, {unique: true, dropDups: true}); assert.commandWorked(res); // The spec should have been stripped of the dropDups option. diff --git a/jstests/core/index_id_options.js b/jstests/core/index_id_options.js index 475a1a6fe95..91bdce8090f 100644 --- a/jstests/core/index_id_options.js +++ b/jstests/core/index_id_options.js @@ -21,12 +21,12 @@ var coll = db.getSiblingDB("local").index_id_options; // _id indexes must have key pattern {_id: 1}. coll.drop(); assert.commandWorked(coll.runCommand("create", {autoIndexId: false})); -assert.commandFailed(coll.createIndex({_id: -1}, {name: "_id_"})); +assert.commandFailed(coll.ensureIndex({_id: -1}, {name: "_id_"})); // The name of an _id index gets corrected to "_id_". coll.drop(); assert.commandWorked(coll.runCommand("create", {autoIndexId: false})); -assert.commandWorked(coll.createIndex({_id: 1}, {name: "bad"})); +assert.commandWorked(coll.ensureIndex({_id: 1}, {name: "bad"})); var spec = GetIndexHelpers.findByKeyPattern(coll.getIndexes(), {_id: 1}); assert.neq(null, spec, "_id index spec not found"); assert.eq("_id_", spec.name, tojson(spec)); @@ -34,35 +34,35 @@ assert.eq("_id_", spec.name, tojson(spec)); // _id indexes cannot have any options other than "key", "name", "ns", "v", and "collation." coll.drop(); assert.commandWorked(coll.runCommand("create", {autoIndexId: false})); -assert.commandFailed(coll.createIndex({_id: 1}, {name: "_id_", unique: true})); -assert.commandFailed(coll.createIndex({_id: 1}, {name: "_id_", sparse: false})); -assert.commandFailed(coll.createIndex({_id: 1}, {name: "_id_", partialFilterExpression: {a: 1}})); -assert.commandFailed(coll.createIndex({_id: 1}, {name: "_id_", expireAfterSeconds: 3600})); -assert.commandFailed(coll.createIndex({_id: 1}, {name: "_id_", background: false})); -assert.commandFailed(coll.createIndex({_id: 1}, {name: "_id_", unknown: true})); -assert.commandWorked(coll.createIndex( +assert.commandFailed(coll.ensureIndex({_id: 1}, {name: "_id_", unique: true})); +assert.commandFailed(coll.ensureIndex({_id: 1}, {name: "_id_", sparse: false})); +assert.commandFailed(coll.ensureIndex({_id: 1}, {name: "_id_", partialFilterExpression: {a: 1}})); +assert.commandFailed(coll.ensureIndex({_id: 1}, {name: "_id_", expireAfterSeconds: 3600})); +assert.commandFailed(coll.ensureIndex({_id: 1}, {name: "_id_", background: false})); +assert.commandFailed(coll.ensureIndex({_id: 1}, {name: "_id_", unknown: true})); +assert.commandWorked(coll.ensureIndex( {_id: 1}, {name: "_id_", ns: coll.getFullName(), v: 2, collation: {locale: "simple"}})); // _id indexes must have the collection default collation. coll.drop(); assert.commandWorked(coll.runCommand("create", {autoIndexId: false})); -assert.commandFailed(coll.createIndex({_id: 1}, {name: "_id_", collation: {locale: "en_US"}})); -assert.commandWorked(coll.createIndex({_id: 1}, {name: "_id_", collation: {locale: "simple"}})); +assert.commandFailed(coll.ensureIndex({_id: 1}, {name: "_id_", collation: {locale: "en_US"}})); +assert.commandWorked(coll.ensureIndex({_id: 1}, {name: "_id_", collation: {locale: "simple"}})); coll.drop(); assert.commandWorked(coll.runCommand("create", {autoIndexId: false})); -assert.commandWorked(coll.createIndex({_id: 1}, {name: "_id_"})); +assert.commandWorked(coll.ensureIndex({_id: 1}, {name: "_id_"})); coll.drop(); assert.commandWorked(coll.runCommand("create", {autoIndexId: false, collation: {locale: "en_US"}})); -assert.commandFailed(coll.createIndex({_id: 1}, {name: "_id_", collation: {locale: "simple"}})); -assert.commandFailed(coll.createIndex({_id: 1}, {name: "_id_", collation: {locale: "fr_CA"}})); +assert.commandFailed(coll.ensureIndex({_id: 1}, {name: "_id_", collation: {locale: "simple"}})); +assert.commandFailed(coll.ensureIndex({_id: 1}, {name: "_id_", collation: {locale: "fr_CA"}})); assert.commandWorked( - coll.createIndex({_id: 1}, {name: "_id_", collation: {locale: "en_US", strength: 3}})); + coll.ensureIndex({_id: 1}, {name: "_id_", collation: {locale: "en_US", strength: 3}})); coll.drop(); assert.commandWorked(coll.runCommand("create", {autoIndexId: false, collation: {locale: "en_US"}})); -assert.commandWorked(coll.createIndex({_id: 1}, {name: "_id_"})); +assert.commandWorked(coll.ensureIndex({_id: 1}, {name: "_id_"})); spec = GetIndexHelpers.findByName(coll.getIndexes(), "_id_"); assert.neq(null, spec, "_id index spec not found"); assert.eq("en_US", spec.collation.locale, tojson(spec)); @@ -70,6 +70,6 @@ assert.eq("en_US", spec.collation.locale, tojson(spec)); // Non-_id indexes cannot have the name "_id_". coll.drop(); assert.commandWorked(coll.runCommand("create", {autoIndexId: false})); -assert.commandFailed(coll.createIndex({_id: "hashed"}, {name: "_id_"})); -assert.commandFailed(coll.createIndex({a: 1}, {name: "_id_"})); +assert.commandFailed(coll.ensureIndex({_id: "hashed"}, {name: "_id_"})); +assert.commandFailed(coll.ensureIndex({a: 1}, {name: "_id_"})); })(); diff --git a/jstests/core/index_many.js b/jstests/core/index_many.js index cdd559c9be5..f95d4ac50de 100644 --- a/jstests/core/index_many.js +++ b/jstests/core/index_many.js @@ -22,7 +22,7 @@ function f() { patt = {x: 1}; if (x == 64) patt = {y: 1}; - lastErr = t.createIndex(patt); + lastErr = t.ensureIndex(patt); x++; } diff --git a/jstests/core/index_many2.js b/jstests/core/index_many2.js index 70fada7396e..f6f6b0cb392 100644 --- a/jstests/core/index_many2.js +++ b/jstests/core/index_many2.js @@ -16,7 +16,7 @@ function make(n) { } for (i = 1; i < 1000; i++) { - t.createIndex(make(i)); + t.ensureIndex(make(i)); } assert.eq(64, t.getIndexKeys().length, "A2"); @@ -26,7 +26,7 @@ num = t.getIndexKeys().length; t.dropIndex(make(num - 1)); assert.eq(num - 1, t.getIndexKeys().length, "B0"); -t.createIndex({z: 1}); +t.ensureIndex({z: 1}); assert.eq(num, t.getIndexKeys().length, "B1"); t.dropIndexes("*"); diff --git a/jstests/core/index_partial_validate.js b/jstests/core/index_partial_validate.js index 5011b4b8bc2..2319aac2954 100644 --- a/jstests/core/index_partial_validate.js +++ b/jstests/core/index_partial_validate.js @@ -6,10 +6,10 @@ var t = db.index_partial_validate; t.drop(); -var res = t.createIndex({a: 1}, {partialFilterExpression: {a: {$lte: 1}}}); +var res = t.ensureIndex({a: 1}, {partialFilterExpression: {a: {$lte: 1}}}); assert.commandWorked(res); -res = t.createIndex({b: 1}); +res = t.ensureIndex({b: 1}); assert.commandWorked(res); res = t.insert({non_indexed_field: 'x'}); diff --git a/jstests/core/index_partial_write_ops.js b/jstests/core/index_partial_write_ops.js index 6adcb8933fd..df80ac33b42 100644 --- a/jstests/core/index_partial_write_ops.js +++ b/jstests/core/index_partial_write_ops.js @@ -21,7 +21,7 @@ var getNumKeys = function(idxName) { coll.drop(); // Create partial index. -assert.commandWorked(coll.createIndex({x: 1}, {unique: true, partialFilterExpression: {a: 1}})); +assert.commandWorked(coll.ensureIndex({x: 1}, {unique: true, partialFilterExpression: {a: 1}})); assert.commandWorked(coll.insert({_id: 1, x: 5, a: 2, b: 1})); // Not in index. assert.commandWorked(coll.insert({_id: 2, x: 6, a: 1, b: 1})); // In index. diff --git a/jstests/core/index_sparse1.js b/jstests/core/index_sparse1.js index 58bc5baa9b8..a7c1e8605ef 100644 --- a/jstests/core/index_sparse1.js +++ b/jstests/core/index_sparse1.js @@ -14,13 +14,13 @@ t.insert({_id: 5}); assert.eq(5, t.count(), "A1"); assert.eq(5, t.find().sort({x: 1}).itcount(), "A2"); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq(2, t.getIndexes().length, "B1"); assert.eq(5, t.find().sort({x: 1}).itcount(), "B2"); t.dropIndex({x: 1}); assert.eq(1, t.getIndexes().length, "B3"); -t.createIndex({x: 1}, {sparse: 1}); +t.ensureIndex({x: 1}, {sparse: 1}); assert.eq(2, t.getIndexes().length, "C1"); assert.eq(5, t.find().sort({x: 1}).itcount(), "C2"); t.dropIndex({x: 1}); @@ -31,14 +31,14 @@ assert.eq(1, t.getIndexes().length, "C3"); t.remove({_id: 2}); // test that we can't create a unique index without sparse -assert.commandFailed(t.createIndex({x: 1}, {unique: 1})); +assert.commandFailed(t.ensureIndex({x: 1}, {unique: 1})); assert.eq(1, t.getIndexes().length, "D2"); -t.createIndex({x: 1}, {unique: 1, sparse: 1}); +t.ensureIndex({x: 1}, {unique: 1, sparse: 1}); assert.eq(2, t.getIndexes().length, "E1"); t.dropIndex({x: 1}); assert.eq(1, t.getIndexes().length, "E3"); t.insert({_id: 2, x: 2}); -t.createIndex({x: 1}, {unique: 1, sparse: 1}); +t.ensureIndex({x: 1}, {unique: 1, sparse: 1}); assert.eq(1, t.getIndexes().length, "F1"); diff --git a/jstests/core/index_sparse2.js b/jstests/core/index_sparse2.js index 324b46d8216..148ad70b203 100644 --- a/jstests/core/index_sparse2.js +++ b/jstests/core/index_sparse2.js @@ -9,14 +9,14 @@ t.insert({_id: 1, x: 1, y: 1}); t.insert({_id: 2, x: 2}); t.insert({_id: 3}); -t.createIndex({x: 1, y: 1}); +t.ensureIndex({x: 1, y: 1}); assert.eq(2, t.getIndexes().length, "A1"); assert.eq(3, t.find().sort({x: 1, y: 1}).count(), "A2 count()"); assert.eq(3, t.find().sort({x: 1, y: 1}).itcount(), "A2 itcount()"); t.dropIndex({x: 1, y: 1}); assert.eq(1, t.getIndexes().length, "A3"); -t.createIndex({x: 1, y: 1}, {sparse: 1}); +t.ensureIndex({x: 1, y: 1}, {sparse: 1}); assert.eq(2, t.getIndexes().length, "B1"); assert.eq(3, t.find().sort({x: 1, y: 1}).count(), "B2 count()"); assert.eq(3, t.find().sort({x: 1, y: 1}).itcount(), "B2 itcount()"); diff --git a/jstests/core/index_type_change.js b/jstests/core/index_type_change.js index d23984a132d..4ecb5081347 100644 --- a/jstests/core/index_type_change.js +++ b/jstests/core/index_type_change.js @@ -18,7 +18,7 @@ load("jstests/libs/analyze_plan.js"); // For 'isIndexOnly'. var coll = db.index_type_change; coll.drop(); -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); assert.commandWorked(coll.insert({a: 2})); assert.eq(1, coll.find({a: {$type: "double"}}).itcount()); diff --git a/jstests/core/indexa.js b/jstests/core/indexa.js index 01fde035621..90e74adc4f4 100644 --- a/jstests/core/indexa.js +++ b/jstests/core/indexa.js @@ -8,7 +8,7 @@ t = db.indexa; t.drop(); -t.createIndex({x: 1}, true); +t.ensureIndex({x: 1}, true); t.insert({'x': 'A'}); t.insert({'x': 'B'}); diff --git a/jstests/core/indexapi.js b/jstests/core/indexapi.js index 29d39ea721b..14cf634e556 100644 --- a/jstests/core/indexapi.js +++ b/jstests/core/indexapi.js @@ -31,14 +31,14 @@ c.dropDups = true; assert.eq(c, t._indexSpec({x: 1}, [true, true]), "G"); assert.eq(c, t._indexSpec({x: 1}, {unique: true, dropDups: true}), "F"); -t.createIndex({x: 1}, {unique: true}); +t.ensureIndex({x: 1}, {unique: true}); idx = t.getIndexes(); assert.eq(2, idx.length, "M1"); assert.eq(key, idx[1].key, "M2"); assert(idx[1].unique, "M3"); t.drop(); -t.createIndex({x: 1}, {unique: 1}); +t.ensureIndex({x: 1}, {unique: 1}); idx = t.getIndexes(); assert.eq(2, idx.length, "M1"); assert.eq(key, idx[1].key, "M2"); diff --git a/jstests/core/indexb.js b/jstests/core/indexb.js index 59546f7fae2..6890dda3cbc 100644 --- a/jstests/core/indexb.js +++ b/jstests/core/indexb.js @@ -10,7 +10,7 @@ t = db.indexb; t.drop(); -t.createIndex({a: 1}, true); +t.ensureIndex({a: 1}, true); t.insert({a: 1}); diff --git a/jstests/core/indexc.js b/jstests/core/indexc.js index bf5735380fa..3bc4c9eaca8 100644 --- a/jstests/core/indexc.js +++ b/jstests/core/indexc.js @@ -13,8 +13,8 @@ for (var i = 1; i < 100; i++) { assert.eq(50, t.find({ts: {$lt: mid}}).itcount(), "A"); assert.eq(50, t.find({ts: {$lt: mid}}).sort({ts: 1}).itcount(), "B"); -t.createIndex({ts: 1, cats: 1}); -t.createIndex({cats: 1}); +t.ensureIndex({ts: 1, cats: 1}); +t.ensureIndex({cats: 1}); // multi-key bug was firing here (related to getsetdup()): assert.eq(50, t.find({ts: {$lt: mid}}).itcount(), "C"); diff --git a/jstests/core/indexe.js b/jstests/core/indexe.js index a307882adc3..6961229c682 100644 --- a/jstests/core/indexe.js +++ b/jstests/core/indexe.js @@ -13,7 +13,7 @@ assert.eq(num, t.find().count(), "A1"); assert.eq(num, t.find({a: "b"}).count(), "B1"); assert.eq(num, t.find({a: "b"}).itcount(), "C1"); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(num, t.find().count(), "A2"); assert.eq(num, t.find().sort({a: 1}).count(), "A2a"); diff --git a/jstests/core/indexf.js b/jstests/core/indexf.js index 4dc8fb0b060..cbe1b968b5e 100644 --- a/jstests/core/indexf.js +++ b/jstests/core/indexf.js @@ -7,7 +7,7 @@ t = db.indexf; t.drop(); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); t.save({x: 2}); t.save({y: 3}); diff --git a/jstests/core/indexg.js b/jstests/core/indexg.js index 486f4be0ebe..3cafede4cff 100644 --- a/jstests/core/indexg.js +++ b/jstests/core/indexg.js @@ -9,5 +9,5 @@ doit = function() { assert.eq(1, f.count({list: {$in: [1], $not: {$in: [3]}}})); }; doit(); -f.createIndex({list: 1}); +f.ensureIndex({list: 1}); doit();
\ No newline at end of file diff --git a/jstests/core/indexj.js b/jstests/core/indexj.js index 64cf9844d7f..76bf8cb17e9 100644 --- a/jstests/core/indexj.js +++ b/jstests/core/indexj.js @@ -20,12 +20,12 @@ function keysExamined(query, hint, sort) { return explain.executionStats.totalKeysExamined; } -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: 5}); assert.eq(0, keysExamined({a: {$gt: 4, $lt: 5}}), "A"); t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: 4}); assert.eq(0, keysExamined({a: {$gt: 4, $lt: 5}}), "B"); @@ -39,7 +39,7 @@ t.save({a: 5}); assert.eq(0, keysExamined({a: {$gt: 4, $lt: 5}}), "D"); t.drop(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); t.save({a: 1, b: 1}); t.save({a: 1, b: 2}); t.save({a: 2, b: 1}); diff --git a/jstests/core/indexl.js b/jstests/core/indexl.js index cde169eda71..c83638607d4 100644 --- a/jstests/core/indexl.js +++ b/jstests/core/indexl.js @@ -23,5 +23,5 @@ function test(t) { t.drop(); test(t); t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); test(t);
\ No newline at end of file diff --git a/jstests/core/indexm.js b/jstests/core/indexm.js index 7613b125357..820bedd7baa 100644 --- a/jstests/core/indexm.js +++ b/jstests/core/indexm.js @@ -13,12 +13,12 @@ function test() { test(); // Now create an index. -t.createIndex({"a": 1}); +t.ensureIndex({"a": 1}); test(); // Now create a different index. t.dropIndexes(); -t.createIndex({"a.x": 1}); +t.ensureIndex({"a.x": 1}); test(); // Drop the indexes. diff --git a/jstests/core/indexn.js b/jstests/core/indexn.js index 02547280ad9..014ba050cbc 100644 --- a/jstests/core/indexn.js +++ b/jstests/core/indexn.js @@ -9,8 +9,8 @@ t.drop(); t.save({a: 1, b: [1, 2]}); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); // {a:1} is a single key index, so no matches are possible for this query assert.eq(0, t.count({a: {$gt: 5, $lt: 0}})); diff --git a/jstests/core/indexp.js b/jstests/core/indexp.js index 8199e0f132c..71e9f8eadb9 100644 --- a/jstests/core/indexp.js +++ b/jstests/core/indexp.js @@ -6,18 +6,18 @@ var coll = db.jstests_indexp; // Empty field checks. -assert.commandFailed(coll.createIndex({'a..b': 1})); -assert.commandFailed(coll.createIndex({'.a': 1})); -assert.commandFailed(coll.createIndex({'a.': 1})); -assert.commandFailed(coll.createIndex({'.': 1})); -assert.commandFailed(coll.createIndex({'': 1})); -assert.commandWorked(coll.createIndex({'a.b': 1})); +assert.commandFailed(coll.ensureIndex({'a..b': 1})); +assert.commandFailed(coll.ensureIndex({'.a': 1})); +assert.commandFailed(coll.ensureIndex({'a.': 1})); +assert.commandFailed(coll.ensureIndex({'.': 1})); +assert.commandFailed(coll.ensureIndex({'': 1})); +assert.commandWorked(coll.ensureIndex({'a.b': 1})); // '$'-prefixed field checks. -assert.commandFailed(coll.createIndex({'$a': 1})); -assert.commandFailed(coll.createIndex({'a.$b': 1})); -assert.commandFailed(coll.createIndex({'$db': 1})); -assert.commandWorked(coll.createIndex({'a$ap': 1})); // $ in middle is ok -assert.commandWorked(coll.createIndex({'a.$id': 1})); // $id/$db/$ref are execptions +assert.commandFailed(coll.ensureIndex({'$a': 1})); +assert.commandFailed(coll.ensureIndex({'a.$b': 1})); +assert.commandFailed(coll.ensureIndex({'$db': 1})); +assert.commandWorked(coll.ensureIndex({'a$ap': 1})); // $ in middle is ok +assert.commandWorked(coll.ensureIndex({'a.$id': 1})); // $id/$db/$ref are execptions coll.dropIndexes(); diff --git a/jstests/core/indexr.js b/jstests/core/indexr.js index de3afe8cdc1..15cd56e9681 100644 --- a/jstests/core/indexr.js +++ b/jstests/core/indexr.js @@ -15,8 +15,8 @@ assert.eq(1, t.count({a: {b: 3, c: 6}, 'a.c': {$lt: 4}})); // Check with single key indexes. t.remove({}); -t.createIndex({'a.b': 1, 'a.c': 1}); -t.createIndex({a: 1, 'a.c': 1}); +t.ensureIndex({'a.b': 1, 'a.c': 1}); +t.ensureIndex({a: 1, 'a.c': 1}); assert.eq(0, t.count({'a.b': {$gt: 2}, 'a.c': {$lt: 4}})); assert.eq(0, t.count({a: {b: 3, c: 6}, 'a.c': {$lt: 4}})); diff --git a/jstests/core/indexs.js b/jstests/core/indexs.js index 6ee625071e2..2fc9724a590 100644 --- a/jstests/core/indexs.js +++ b/jstests/core/indexs.js @@ -4,16 +4,16 @@ t = db.jstests_indexs; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: [{b: 3}]}); assert.eq(1, t.count({a: {b: 3}})); t.drop(); -t.createIndex({a: 1, 'a.b': 1}); +t.ensureIndex({a: 1, 'a.b': 1}); t.save({a: {b: 3}}); assert.eq(1, t.count({a: {b: 3}})); t.drop(); -t.createIndex({a: 1, 'a.b': 1}); +t.ensureIndex({a: 1, 'a.b': 1}); t.save({a: [{b: 3}]}); assert.eq(1, t.count({a: {b: 3}})); diff --git a/jstests/core/indext.js b/jstests/core/indext.js index 1ac92d6be5d..163a3e4a8a3 100644 --- a/jstests/core/indext.js +++ b/jstests/core/indext.js @@ -3,12 +3,12 @@ t = db.jstests_indext; t.drop(); -t.createIndex({'a.b': 1}, {sparse: true}); +t.ensureIndex({'a.b': 1}, {sparse: true}); t.save({a: []}); t.save({a: 1}); assert.eq(0, t.find().hint({'a.b': 1}).itcount()); -t.createIndex({'a.b': 1, 'a.c': 1}, {sparse: true}); +t.ensureIndex({'a.b': 1, 'a.c': 1}, {sparse: true}); t.save({a: []}); t.save({a: 1}); assert.eq(0, t.find().hint({'a.b': 1, 'a.c': 1}).itcount()); diff --git a/jstests/core/indexu.js b/jstests/core/indexu.js index 973fc0e4985..22af42d5d6a 100644 --- a/jstests/core/indexu.js +++ b/jstests/core/indexu.js @@ -15,56 +15,56 @@ var noDupDoc = {a: [{'1': 1}]}; // Test that we can't index dupDoc. assert.commandWorked(t.save(dupDoc)); -assert.commandFailedWithCode(t.createIndex({'a.0': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0': 1}), 16746); // Test that we can fail gracefully when dupDoc has a large array padded with nulls. // Index is based on max padding constant in mongo/db/update/path_support.h assert.commandWorked(t.update({_id: 0}, {$set: {'a.1500001': 1}})); -assert.commandFailedWithCode(t.createIndex({'a.0': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0': 1}), 16746); t.remove({}); -assert.commandWorked(t.createIndex({'a.0': 1})); +assert.commandWorked(t.ensureIndex({'a.0': 1})); assert.writeError(t.save(dupDoc)); // Test that we can't index dupDoc2. t.drop(); assert.commandWorked(t.save(dupDoc2)); -assert.commandFailedWithCode(t.createIndex({'a.1': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.1': 1}), 16746); t.remove({}); -assert.commandWorked(t.createIndex({'a.1': 1})); +assert.commandWorked(t.ensureIndex({'a.1': 1})); assert.writeError(t.save(dupDoc2)); // Test that we can index dupDoc with a different index. t.drop(); -t.createIndex({'a.b': 1}); +t.ensureIndex({'a.b': 1}); assert.commandWorked(t.save(dupDoc)); // Test number field starting with hyphen. t.drop(); -t.createIndex({'a.-1': 1}); +t.ensureIndex({'a.-1': 1}); assert.commandWorked(t.save({a: [{'-1': 1}]})); // Test number field starting with zero. t.drop(); -t.createIndex({'a.00': 1}); +t.ensureIndex({'a.00': 1}); assert.commandWorked(t.save({a: [{'00': 1}]})); // Test multiple array indexes t.drop(); -t.createIndex({'a.0': 1, 'a.1': 1}); +t.ensureIndex({'a.0': 1, 'a.1': 1}); assert.commandWorked(t.save({a: [{'1': 1}]})); assert.writeError(t.save({a: [{'1': 1}, 4]})); // Test that we can index noDupDoc. t.drop(); t.save(noDupDoc); -assert.commandWorked(t.createIndex({'a.0': 1})); -assert.commandWorked(t.createIndex({'a.1': 1})); +assert.commandWorked(t.ensureIndex({'a.0': 1})); +assert.commandWorked(t.ensureIndex({'a.1': 1})); t.drop(); -t.createIndex({'a.0': 1}); -t.createIndex({'a.1': 1}); +t.ensureIndex({'a.0': 1}); +t.ensureIndex({'a.1': 1}); assert.commandWorked(t.save(noDupDoc)); // Test that we can query noDupDoc. @@ -76,7 +76,7 @@ assert.eq(1, t.find({'a.0': {'1': 1}}).hint({$natural: 1}).itcount()); // Check multiple nested array fields. t.drop(); t.save({a: [[1]]}); -assert.commandWorked(t.createIndex({'a.0.0': 1})); +assert.commandWorked(t.ensureIndex({'a.0.0': 1})); assert.eq(1, t.find({'a.0.0': 1}).hint({$natural: 1}).itcount()); assert.eq(1, t.find({'a.0.0': 1}).hint({'a.0.0': 1}).itcount()); @@ -84,36 +84,36 @@ assert.eq(1, t.find({'a.0.0': 1}).hint({'a.0.0': 1}).itcount()); // field. t.drop(); t.save({a: [[1], {'0': 1}]}); -assert.commandFailed(t.createIndex({'a.0.0': 1})); +assert.commandFailed(t.ensureIndex({'a.0.0': 1})); // Check where there is a duplicate for a fully addressed field. t.drop(); assert.commandWorked(t.save({a: [[1], {'0': [1]}]})); -assert.commandFailedWithCode(t.createIndex({'a.0.0': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0.0': 1}), 16746); // Two ways of addressing parse to an array. t.drop(); t.save({a: [{'0': 1}]}); -assert.commandFailedWithCode(t.createIndex({'a.0.0': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0.0': 1}), 16746); // Test several key depths - with same arrays being found. t.drop(); t.save({a: [{'0': [{'0': 1}]}]}); -assert.commandFailedWithCode(t.createIndex({'a.0.0.0.0.0.0': 1}), 16746); -assert.commandFailedWithCode(t.createIndex({'a.0.0.0.0.0': 1}), 16746); -assert.commandFailedWithCode(t.createIndex({'a.0.0.0.0': 1}), 16746); -assert.commandFailedWithCode(t.createIndex({'a.0.0.0': 1}), 16746); -assert.commandFailedWithCode(t.createIndex({'a.0.0': 1}), 16746); -assert.commandFailedWithCode(t.createIndex({'a.0': 1}), 16746); -assert.commandWorked(t.createIndex({'a': 1})); +assert.commandFailedWithCode(t.ensureIndex({'a.0.0.0.0.0.0': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0.0.0.0.0': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0.0.0.0': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0.0.0': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0.0': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0': 1}), 16746); +assert.commandWorked(t.ensureIndex({'a': 1})); // Two prefixes extract docs, but one terminates extraction before array. t.drop(); t.save({a: [{'0': {'c': []}}]}); -assert.commandFailedWithCode(t.createIndex({'a.0.c': 1}), 16746); +assert.commandFailedWithCode(t.ensureIndex({'a.0.c': 1}), 16746); t.drop(); t.save({a: [[{'b': 1}]]}); assert.eq(1, t.find({'a.0.b': 1}).itcount()); -t.createIndex({'a.0.b': 1}); +t.ensureIndex({'a.0.b': 1}); assert.eq(1, t.find({'a.0.b': 1}).itcount()); diff --git a/jstests/core/insert_illegal_doc.js b/jstests/core/insert_illegal_doc.js index f6344f1c62b..64ecb0ae7ad 100644 --- a/jstests/core/insert_illegal_doc.js +++ b/jstests/core/insert_illegal_doc.js @@ -2,7 +2,7 @@ // "parallel indexing of arrays" test var coll = db.insert_illegal_doc; coll.drop(); -coll.createIndex({a: 1, b: 1}); +coll.ensureIndex({a: 1, b: 1}); var res; // test upsert diff --git a/jstests/core/js3.js b/jstests/core/js3.js index 8698195d6c4..89847210714 100644 --- a/jstests/core/js3.js +++ b/jstests/core/js3.js @@ -18,8 +18,8 @@ for (z = 0; z < 2; z++) { t.drop(); if (z > 0) { - t.createIndex({_id: 1}); - t.createIndex({i: 1}); + t.ensureIndex({_id: 1}); + t.ensureIndex({i: 1}); } for (i = 0; i < 1000; i++) @@ -51,8 +51,8 @@ for (z = 0; z < 2; z++) { debug(ok); assert(ok); - t.createIndex({z: 1}); - t.createIndex({q: 1}); + t.ensureIndex({z: 1}); + t.ensureIndex({q: 1}); debug("before indexed find"); diff --git a/jstests/core/list_indexes.js b/jstests/core/list_indexes.js index a81a1adf68a..040d30e6290 100644 --- a/jstests/core/list_indexes.js +++ b/jstests/core/list_indexes.js @@ -59,7 +59,7 @@ assert.eq(["_id_"], cursorGetIndexNames(getListIndexesCursor(coll))); coll.drop(); assert.commandWorked(coll.getDB().createCollection(coll.getName())); -assert.commandWorked(coll.createIndex({a: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({a: 1}, {unique: true})); specs = cursorGetIndexSpecs(getListIndexesCursor(coll)); assert.eq(2, specs.length); assert.eq("_id_", specs[0].name); @@ -84,7 +84,7 @@ assert.commandFailed(coll.getDB().runCommand({listIndexes: []})); coll.drop(); assert.commandWorked(coll.getDB().createCollection(coll.getName())); -assert.commandWorked(coll.createIndex({a: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({a: 1}, {unique: true})); cursor = getListIndexesCursor(coll, {cursor: {batchSize: 2}}); assert.eq(2, cursor.objsLeftInBatch()); @@ -124,9 +124,9 @@ assert.eq(["_id_", "a_1"], cursorGetIndexNames(cursor)); coll.drop(); assert.commandWorked(coll.getDB().createCollection(coll.getName())); -assert.commandWorked(coll.createIndex({a: 1}, {unique: true})); -assert.commandWorked(coll.createIndex({b: 1}, {unique: true})); -assert.commandWorked(coll.createIndex({c: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({a: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({b: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({c: 1}, {unique: true})); cursor = getListIndexesCursor(coll, {cursor: {batchSize: 0}}, 2); assert.eq(0, cursor.objsLeftInBatch()); @@ -167,9 +167,9 @@ if (!FixtureHelpers.isMongos(db)) { coll.drop(); assert.commandWorked(coll.getDB().createCollection(coll.getName())); -assert.commandWorked(coll.createIndex({a: 1}, {unique: true})); -assert.commandWorked(coll.createIndex({b: 1}, {unique: true})); -assert.commandWorked(coll.createIndex({c: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({a: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({b: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({c: 1}, {unique: true})); res = coll.runCommand("listIndexes", {cursor: {batchSize: 0}}); cursor = new DBCommandCursor(coll.getDB(), res, 2); diff --git a/jstests/core/list_indexes_invalid.js b/jstests/core/list_indexes_invalid.js index 7b73a4278ce..43d64a594c2 100644 --- a/jstests/core/list_indexes_invalid.js +++ b/jstests/core/list_indexes_invalid.js @@ -8,7 +8,7 @@ var coll = db.list_indexes_invalid; coll.drop(); assert.commandWorked(coll.getDB().createCollection(coll.getName())); -assert.commandWorked(coll.createIndex({a: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({a: 1}, {unique: true})); assert.throws(function() { getListIndexesCursor(coll, {cursor: 0}); diff --git a/jstests/core/minmax.js b/jstests/core/minmax.js index b4f181689a2..14f4ed0ec2c 100644 --- a/jstests/core/minmax.js +++ b/jstests/core/minmax.js @@ -16,7 +16,7 @@ function addData() { assert.commandWorked(coll.save({a: 2, b: 2})); } -assert.commandWorked(coll.createIndex({a: 1, b: 1})); +assert.commandWorked(coll.ensureIndex({a: 1, b: 1})); addData(); assert.eq(1, coll.find().hint({a: 1, b: 1}).min({a: 1, b: 2}).max({a: 2, b: 1}).toArray().length); @@ -31,7 +31,7 @@ assert.eq(3, coll.find().hint({a: 1, b: 1}).max({a: 2, b: 1.5}).hint({a: 1, b: 1}).toArray().length); coll.drop(); -assert.commandWorked(coll.createIndex({a: 1, b: -1})); +assert.commandWorked(coll.ensureIndex({a: 1, b: -1})); addData(); assert.eq(4, coll.find().hint({a: 1, b: -1}).min({a: 1, b: 2}).toArray().length); assert.eq(4, coll.find().hint({a: 1, b: -1}).max({a: 2, b: 0.5}).toArray().length); @@ -78,7 +78,7 @@ error = assert.throws(function() { assert.eq(error.code, ErrorCodes.NoQueryExecutionPlans); coll.drop(); -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); for (let i = 0; i < 10; ++i) { assert.commandWorked(coll.save({_id: i, a: i})); } @@ -103,7 +103,7 @@ assert.eq(error.code, 51175); coll.drop(); addData(); -assert.commandWorked(coll.createIndex({a: 1, b: 1})); +assert.commandWorked(coll.ensureIndex({a: 1, b: 1})); error = assert.throws(function() { coll.find().min({a: 1, b: 2}).max({a: 1, b: 2}).hint({a: 1, b: 1}).toArray(); @@ -112,7 +112,7 @@ assert.eq(error.code, 51175); // Test ascending index. coll.drop(); -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); assert.commandWorked(coll.insert({a: 3})); assert.commandWorked(coll.insert({a: 4})); assert.commandWorked(coll.insert({a: 5})); @@ -134,7 +134,7 @@ assert(!cursor.hasNext()); // Test descending index. assert.commandWorked(coll.dropIndexes()); -assert.commandWorked(coll.createIndex({a: -1})); +assert.commandWorked(coll.ensureIndex({a: -1})); cursor = coll.find().hint({a: -1}).min({a: 4}); if (FixtureHelpers.numberOfShardsForCollection(coll) === 1) { diff --git a/jstests/core/mr_multikey_deduping.js b/jstests/core/mr_multikey_deduping.js index e3f729ef16f..604635a67fc 100644 --- a/jstests/core/mr_multikey_deduping.js +++ b/jstests/core/mr_multikey_deduping.js @@ -39,7 +39,7 @@ outColl.drop(); assert(outColl.drop()); // Now test that we get the same results when there's an index present. - assert.commandWorked(coll.createIndex({arr: 1})); + assert.commandWorked(coll.ensureIndex({arr: 1})); res = assert.commandWorked(coll.mapReduce( mapFn, reduceFn, {out: {merge: outColl.getName()}, query: {arr: {$gte: 0}}})); assert(outColl.drop()); @@ -93,7 +93,7 @@ outColl.drop(); resultsEq([{_id: "cat", value: 1}, {_id: "dog", value: 1}], resultsNoIndexEqualityOnName)); assert(resultsEq(resultsNoIndexNoQuery, resultsNoIndexRangeOnName)); - assert.commandWorked(coll.createIndex({name: 1, tags: 1})); + assert.commandWorked(coll.ensureIndex({name: 1, tags: 1})); const resultsIndexedNoQuery = assert diff --git a/jstests/core/mr_sort.js b/jstests/core/mr_sort.js index c1ce7d3861b..df98e6a6d3d 100644 --- a/jstests/core/mr_sort.js +++ b/jstests/core/mr_sort.js @@ -12,7 +12,7 @@ t = db.mr_sort; t.drop(); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); t.insert({x: 1}); t.insert({x: 10}); diff --git a/jstests/core/multi.js b/jstests/core/multi.js index ac961ed7a9c..c7853b18f25 100644 --- a/jstests/core/multi.js +++ b/jstests/core/multi.js @@ -1,7 +1,7 @@ t = db.jstests_multi; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: [1, 2]}); assert.eq(1, t.find({a: {$gt: 0}}).count(), "A"); assert.eq(1, t.find({a: {$gt: 0}}).toArray().length, "B"); diff --git a/jstests/core/multi2.js b/jstests/core/multi2.js index 64473e4de98..8c1c4ea5f3c 100644 --- a/jstests/core/multi2.js +++ b/jstests/core/multi2.js @@ -10,13 +10,13 @@ t.save({}); assert.eq(3, t.find({x: 1}).count(), "A"); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq(3, t.find({x: 1}).count(), "B"); assert.eq(4, t.find().sort({x: 1, a: 1}).count(), "s1"); assert.eq(1, t.find({x: 1, a: null}).count(), "B2"); t.dropIndex({x: 1}); -t.createIndex({x: 1, a: 1}); +t.ensureIndex({x: 1, a: 1}); assert.eq(3, t.find({x: 1}).count(), "C"); // SERVER-279 assert.eq(4, t.find().sort({x: 1, a: 1}).count(), "s2"); assert.eq(1, t.find({x: 1, a: null}).count(), "C2"); diff --git a/jstests/core/multikey_geonear.js b/jstests/core/multikey_geonear.js index 4b1cd5eb482..ad24afb0c98 100644 --- a/jstests/core/multikey_geonear.js +++ b/jstests/core/multikey_geonear.js @@ -16,7 +16,7 @@ function checkResults(cursor) { assert(!cursor.hasNext()); } -t.createIndex({a: 1, b: "2dsphere"}); +t.ensureIndex({a: 1, b: "2dsphere"}); t.insert({_id: 0, a: 0, b: {type: "Point", coordinates: [0, 0]}}); t.insert({_id: 1, a: 0, b: {type: "Point", coordinates: [1, 1]}}); @@ -33,7 +33,7 @@ checkResults(cursor); // Repeat these tests for a 2d index. t.drop(); -t.createIndex({a: "2d", b: 1}); +t.ensureIndex({a: "2d", b: 1}); t.insert({_id: 0, a: [0, 0], b: 0}); t.insert({_id: 1, a: [1, 1], b: 1}); t.insert({_id: 2, a: [2, 2], b: 2}); @@ -47,7 +47,7 @@ checkResults(cursor); // The fields in the compound 2dsphere index share a prefix. t.drop(); -t.createIndex({"a.b": 1, "a.c": "2dsphere"}); +t.ensureIndex({"a.b": 1, "a.c": "2dsphere"}); t.insert({_id: 0, a: [{b: 0}, {c: {type: "Point", coordinates: [0, 0]}}]}); t.insert({_id: 1, a: [{b: 1}, {c: {type: "Point", coordinates: [1, 1]}}]}); t.insert({_id: 2, a: [{b: 2}, {c: {type: "Point", coordinates: [2, 2]}}]}); @@ -66,7 +66,7 @@ assert(!cursor.hasNext()); // The fields in the compound 2d index share a prefix. t.drop(); -t.createIndex({"a.b": "2d", "a.c": 1}); +t.ensureIndex({"a.b": "2d", "a.c": 1}); t.insert({_id: 0, a: [{b: [0, 0]}, {c: 0}]}); t.insert({_id: 1, a: [{b: [1, 1]}, {c: 1}]}); t.insert({_id: 2, a: [{b: [2, 2]}, {c: 2}]}); diff --git a/jstests/core/ne1.js b/jstests/core/ne1.js index 5069637eb30..2128bd3a936 100644 --- a/jstests/core/ne1.js +++ b/jstests/core/ne1.js @@ -6,5 +6,5 @@ t.save({x: 2}); t.save({x: 3}); assert.eq(2, t.find({x: {$ne: 2}}).itcount(), "A"); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq(2, t.find({x: {$ne: 2}}).itcount(), "B"); diff --git a/jstests/core/ne2.js b/jstests/core/ne2.js index 5fef4f1d630..db2ee7b01e5 100644 --- a/jstests/core/ne2.js +++ b/jstests/core/ne2.js @@ -5,7 +5,7 @@ t = db.jstests_ne2; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: -0.5}); t.save({a: 0}); diff --git a/jstests/core/nestedarr1.js b/jstests/core/nestedarr1.js index 248a70b5f78..7edef9db512 100644 --- a/jstests/core/nestedarr1.js +++ b/jstests/core/nestedarr1.js @@ -21,7 +21,7 @@ function makeNestArr(depth) { let collection = db.arrNestTest; collection.drop(); -assert.commandWorked(collection.createIndex({a: 1})); +assert.commandWorked(collection.ensureIndex({a: 1})); const kMaxDocumentDepthSoftLimit = 100; const kJavaScriptMaxDepthLimit = 150; diff --git a/jstests/core/nestedobj1.js b/jstests/core/nestedobj1.js index ba97f326934..44fdd4599d7 100644 --- a/jstests/core/nestedobj1.js +++ b/jstests/core/nestedobj1.js @@ -19,7 +19,7 @@ function makeNestObj(depth) { let collection = db.objNestTest; collection.drop(); -assert.commandWorked(collection.createIndex({a: 1})); +assert.commandWorked(collection.ensureIndex({a: 1})); const kMaxDocumentDepthSoftLimit = 100; const kJavaScriptMaxDepthLimit = 150; diff --git a/jstests/core/nin.js b/jstests/core/nin.js index b9887e48828..d8a254357ba 100644 --- a/jstests/core/nin.js +++ b/jstests/core/nin.js @@ -57,5 +57,5 @@ doTest = function(n) { doTest("no index"); t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); doTest("with index"); diff --git a/jstests/core/not1.js b/jstests/core/not1.js index 0726895ebbd..1039ae7c910 100644 --- a/jstests/core/not1.js +++ b/jstests/core/not1.js @@ -16,5 +16,5 @@ function test(name) { } test("no index"); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); test("with index"); diff --git a/jstests/core/not2.js b/jstests/core/not2.js index 31b2efcfa02..0cd9209ce2d 100644 --- a/jstests/core/not2.js +++ b/jstests/core/not2.js @@ -86,6 +86,6 @@ function doTest() { doTest(); // Run the test with an index present. -assert.commandWorked(coll.createIndex({i: 1})); +assert.commandWorked(coll.ensureIndex({i: 1})); doTest(); }()); diff --git a/jstests/core/not3.js b/jstests/core/not3.js index eac6bf8f047..9f3014f2c1a 100644 --- a/jstests/core/not3.js +++ b/jstests/core/not3.js @@ -4,7 +4,7 @@ var t = db.jstests_not3; t.drop(); -t.createIndex({arr: 1}); +t.ensureIndex({arr: 1}); t.save({_id: 0, arr: [1, 2, 3]}); t.save({_id: 1, arr: [10, 11]}); diff --git a/jstests/core/notablescan.js b/jstests/core/notablescan.js index adad7f1b725..eca1bd2e787 100644 --- a/jstests/core/notablescan.js +++ b/jstests/core/notablescan.js @@ -44,7 +44,7 @@ try { assert.includes(err.toString(), "hint $natural is not allowed, because 'notablescan' is enabled"); - t.createIndex({a: 1}); + t.ensureIndex({a: 1}); assert.eq(0, t.find({a: 1, b: 1}).itcount()); assert.eq(1, t.find({a: 1, b: null}).itcount()); diff --git a/jstests/core/numberlong2.js b/jstests/core/numberlong2.js index dad87fe30aa..4eadb744131 100644 --- a/jstests/core/numberlong2.js +++ b/jstests/core/numberlong2.js @@ -8,7 +8,7 @@ t = db.jstests_numberlong2; t.drop(); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); function chk(longNum) { t.remove({}); diff --git a/jstests/core/numberlong4.js b/jstests/core/numberlong4.js index d7d73898b34..f81a9599e21 100644 --- a/jstests/core/numberlong4.js +++ b/jstests/core/numberlong4.js @@ -6,7 +6,7 @@ t.drop(); if (0) { // SERVER-3719 - t.createIndex({x: 1}); + t.ensureIndex({x: 1}); Random.setRandomSeed(); diff --git a/jstests/core/or1.js b/jstests/core/or1.js index d90947d5f87..c5975a058f2 100644 --- a/jstests/core/or1.js +++ b/jstests/core/or1.js @@ -61,13 +61,13 @@ doTest(); // not part of SERVER-1003, but good check for subseq. implementations t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); doTest(); t.drop(); -t.createIndex({b: 1}); +t.ensureIndex({b: 1}); doTest(); t.drop(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); doTest(); diff --git a/jstests/core/or2.js b/jstests/core/or2.js index 508b3294931..5b520197eba 100644 --- a/jstests/core/or2.js +++ b/jstests/core/or2.js @@ -72,17 +72,17 @@ doTest = function(index) { doTest(false); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); doTest(); t.drop(); -t.createIndex({x: 1, a: 1}); +t.ensureIndex({x: 1, a: 1}); doTest(); t.drop(); -t.createIndex({x: 1, b: 1}); +t.ensureIndex({x: 1, b: 1}); doTest(); t.drop(); -t.createIndex({x: 1, a: 1, b: 1}); +t.ensureIndex({x: 1, a: 1, b: 1}); doTest(); diff --git a/jstests/core/or3.js b/jstests/core/or3.js index 26628927c87..22a26d571ca 100644 --- a/jstests/core/or3.js +++ b/jstests/core/or3.js @@ -63,17 +63,17 @@ doTest = function(index) { doTest(false); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); doTest(); t.drop(); -t.createIndex({x: 1, a: 1}); +t.ensureIndex({x: 1, a: 1}); doTest(); t.drop(); -t.createIndex({x: 1, b: 1}); +t.ensureIndex({x: 1, b: 1}); doTest(); t.drop(); -t.createIndex({x: 1, a: 1, b: 1}); +t.ensureIndex({x: 1, a: 1, b: 1}); doTest(); diff --git a/jstests/core/or4.js b/jstests/core/or4.js index e095eb9961c..f065ccbec86 100644 --- a/jstests/core/or4.js +++ b/jstests/core/or4.js @@ -14,8 +14,8 @@ const coll = db.or4; coll.drop(); db.getCollection("mrOutput").drop(); -coll.createIndex({a: 1}); -coll.createIndex({b: 1}); +coll.ensureIndex({a: 1}); +coll.ensureIndex({b: 1}); assert.commandWorked(coll.insert({a: 2})); assert.commandWorked(coll.insert({b: 3})); diff --git a/jstests/core/or5.js b/jstests/core/or5.js index eed4c3fc62d..40d7792eeeb 100644 --- a/jstests/core/or5.js +++ b/jstests/core/or5.js @@ -6,10 +6,10 @@ t = db.jstests_or5; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); -t.createIndex({c: 1}); +t.ensureIndex({c: 1}); t.save({a: 2}); t.save({b: 3}); @@ -36,7 +36,7 @@ for (i = 2; i <= 7; ++i) { assert.eq.automsg("6", "t.find( {$or:[{a:2},{b:3},{c:6}]} ).batchSize( i ).toArray().length"); } -t.createIndex({z: "2d"}); +t.ensureIndex({z: "2d"}); assert.throws.automsg(function() { return t.find({$or: [{z: {$near: [50, 50]}}, {a: 2}]}).toArray(); @@ -45,9 +45,9 @@ assert.throws.automsg(function() { function reset() { t.drop(); - t.createIndex({a: 1}); - t.createIndex({b: 1}); - t.createIndex({c: 1}); + t.ensureIndex({a: 1}); + t.ensureIndex({b: 1}); + t.ensureIndex({c: 1}); t.save({a: 2}); t.save({a: 2}); diff --git a/jstests/core/or6.js b/jstests/core/or6.js index 7b18e1c219a..144f9ed7e9e 100644 --- a/jstests/core/or6.js +++ b/jstests/core/or6.js @@ -6,8 +6,8 @@ var t = db.jstests_orq; t.drop(); -t.createIndex({a: 1, c: 1}); -t.createIndex({b: 1, c: 1}); +t.ensureIndex({a: 1, c: 1}); +t.ensureIndex({b: 1, c: 1}); t.save({a: 1, c: 9}); t.save({a: 1, c: 10}); diff --git a/jstests/core/or7.js b/jstests/core/or7.js index e639a195739..d824a90aa81 100644 --- a/jstests/core/or7.js +++ b/jstests/core/or7.js @@ -3,7 +3,7 @@ t = db.jstests_or7; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: 2}); assert.eq.automsg("1", "t.count( {$or:[{a:{$in:[1,3]}},{a:2}]} )"); diff --git a/jstests/core/or8.js b/jstests/core/or8.js index 4af81ec4829..41537dbdf83 100644 --- a/jstests/core/or8.js +++ b/jstests/core/or8.js @@ -14,7 +14,7 @@ t.find({"$or": [{"PropA": {"$lt": "b"}}, {"PropA": {"$lt": "b", "$gt": "a"}}]}). t.save({a: 1}); t.save({a: 3}); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.find({$or: [{a: {$in: []}}]}).toArray(); assert.eq.automsg("2", "t.find({ $or: [ { a: {$in:[]} }, {a:1}, {a:3} ] } ).toArray().length"); assert.eq.automsg("2", "t.find({ $or: [ {a:1}, { a: {$in:[]} }, {a:3} ] } ).toArray().length"); @@ -24,8 +24,8 @@ assert.eq.automsg("2", "t.find({ $or: [ {a:1}, {a:3}, { a: {$in:[]} } ] } ).toAr t.drop(); t.save({a: {b: 1, c: 1}}); -t.createIndex({'a.b': 1}); -t.createIndex({'a.c': 1}); +t.ensureIndex({'a.b': 1}); +t.ensureIndex({'a.c': 1}); assert.eq(1, t.find({$or: [{'a.b': 1}, {'a.c': 1}]}).itcount()); t.remove({}); diff --git a/jstests/core/or9.js b/jstests/core/or9.js index 4938e84ca04..68814c684cb 100644 --- a/jstests/core/or9.js +++ b/jstests/core/or9.js @@ -5,7 +5,7 @@ t = db.jstests_or9; t.drop(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); t.save({a: 2, b: 2}); diff --git a/jstests/core/or_inexact.js b/jstests/core/or_inexact.js index 0584be98d6d..d6a51d66259 100644 --- a/jstests/core/or_inexact.js +++ b/jstests/core/or_inexact.js @@ -20,7 +20,7 @@ var cursor; // Case 1: An EXACT predicate and an INEXACT_COVERED t.drop(); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); t.insert({_id: 0, name: "thomas"}); t.insert({_id: 1, name: "alexandra"}); cursor = t.find({$or: [{name: "thomas"}, {name: /^alexand(er|ra)/}]}); @@ -28,7 +28,7 @@ assert.eq(2, cursor.itcount(), "case 1"); // Case 2: Two INEXACT_COVERED predicates. t.drop(); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); t.insert({_id: 0, name: "thomas"}); t.insert({_id: 1, name: "alexandra"}); cursor = t.find({$or: [{name: /omas/}, {name: /^alexand(er|ra)/}]}); @@ -36,7 +36,7 @@ assert.eq(2, cursor.itcount(), "case 2"); // Case 3: An EXACT, and INEXACT_COVERED, and an INEXACT_FETCH. t.drop(); -t.createIndex({names: 1}); +t.ensureIndex({names: 1}); t.insert({_id: 0, names: ["thomas", "alexandra"]}); t.insert({_id: 1, names: "frank"}); t.insert({_id: 2, names: "alice"}); @@ -47,7 +47,7 @@ assert.eq(3, cursor.itcount(), "case 3"); // Case 4: Two INEXACT_FETCH. t.drop(); -t.createIndex({names: 1}); +t.ensureIndex({names: 1}); t.insert({_id: 0, names: ["thomas", "alexandra"]}); t.insert({_id: 1, names: ["frank", "alice"]}); t.insert({_id: 2, names: "frank"}); @@ -58,8 +58,8 @@ assert.eq(2, cursor.itcount(), "case 4"); // Case 5: Two indices. One has EXACT and INEXACT_COVERED. The other // has EXACT and INEXACT_FETCH. t.drop(); -t.createIndex({first: 1}); -t.createIndex({last: 1}); +t.ensureIndex({first: 1}); +t.ensureIndex({last: 1}); t.insert({_id: 0, first: "frank", last: "smith"}); t.insert({_id: 1, first: "john", last: "doe"}); t.insert({_id: 2, first: "dave", last: "st"}); @@ -71,7 +71,7 @@ assert.eq(4, cursor.itcount(), "case 5"); // Case 6: Multikey with only EXACT predicates. t.drop(); -t.createIndex({names: 1}); +t.ensureIndex({names: 1}); t.insert({_id: 0, names: ["david", "dave"]}); t.insert({_id: 1, names: ["joseph", "joe", "joey"]}); cursor = t.find({$or: [{names: "dave"}, {names: "joe"}]}); @@ -79,7 +79,7 @@ assert.eq(2, cursor.itcount(), "case 6"); // Case 7: Multikey with EXACT and INEXACT_COVERED. t.drop(); -t.createIndex({names: 1}); +t.ensureIndex({names: 1}); t.insert({_id: 0, names: ["david", "dave"]}); t.insert({_id: 1, names: ["joseph", "joe", "joey"]}); cursor = t.find({$or: [{names: "dave"}, {names: /joe/}]}); @@ -87,8 +87,8 @@ assert.eq(2, cursor.itcount(), "case 7"); // Case 8: Text with EXACT. t.drop(); -t.createIndex({pre: 1, names: "text"}); -t.createIndex({other: 1}); +t.ensureIndex({pre: 1, names: "text"}); +t.ensureIndex({other: 1}); t.insert({_id: 0, pre: 3, names: "david dave", other: 1}); t.insert({_id: 1, pre: 4, names: "joseph joe joey", other: 2}); cursor = t.find({$or: [{$text: {$search: "dave"}, pre: 3}, {other: 2}]}); @@ -96,8 +96,8 @@ assert.eq(2, cursor.itcount(), "case 8"); // Case 9: Text with INEXACT_COVERED. t.drop(); -t.createIndex({pre: 1, names: "text"}); -t.createIndex({other: 1}); +t.ensureIndex({pre: 1, names: "text"}); +t.ensureIndex({other: 1}); t.insert({_id: 0, pre: 3, names: "david dave", other: "foo"}); t.insert({_id: 1, pre: 5, names: "david dave", other: "foo"}); t.insert({_id: 2, pre: 4, names: "joseph joe joey", other: "bar"}); @@ -106,8 +106,8 @@ assert.eq(2, cursor.itcount(), "case 9"); // Case 10: Text requiring filter with INEXACT_COVERED. t.drop(); -t.createIndex({pre: 1, names: "text"}); -t.createIndex({other: 1}); +t.ensureIndex({pre: 1, names: "text"}); +t.ensureIndex({other: 1}); t.insert({_id: 0, pre: 3, names: "david dave", other: "foo"}); t.insert({_id: 1, pre: 3, names: "david dave", other: "foo"}); t.insert({_id: 2, pre: 4, names: "joseph joe joey", other: "bar"}); @@ -116,7 +116,7 @@ assert.eq(3, cursor.itcount(), "case 10"); // Case 11: GEO with non-geo, same index, 2dsphere. t.drop(); -t.createIndex({pre: 1, loc: "2dsphere"}); +t.ensureIndex({pre: 1, loc: "2dsphere"}); t.insert({_id: 0, pre: 3, loc: {type: "Point", coordinates: [40, 5]}}); t.insert({_id: 1, pre: 4, loc: {type: "Point", coordinates: [0, 0]}}); cursor = t.find({ @@ -149,7 +149,7 @@ assert.eq(2, cursor.itcount(), "case 11"); // Case 12: GEO with non-geo, same index, 2d. t.drop(); -t.createIndex({pre: 1, loc: "2d"}); +t.ensureIndex({pre: 1, loc: "2d"}); t.insert({_id: 0, pre: 3, loc: {type: "Point", coordinates: [40, 5]}}); t.insert({_id: 1, pre: 4, loc: {type: "Point", coordinates: [0, 0]}}); cursor = t.find({ @@ -182,7 +182,7 @@ assert.eq(2, cursor.itcount(), "case 12"); // Case 13: $elemMatch object. t.drop(); -t.createIndex({"a.b": 1}); +t.ensureIndex({"a.b": 1}); t.insert({_id: 0, a: [{b: 1}, {b: 2}]}); t.insert({_id: 1, a: [{b: 3}, {b: 4}]}); cursor = t.find({$or: [{a: {$elemMatch: {b: {$lte: 1}}}}, {a: {$elemMatch: {b: {$gte: 4}}}}]}); @@ -190,7 +190,7 @@ assert.eq(2, cursor.itcount(), "case 13"); // Case 14: $elemMatch object, below an AND. t.drop(); -t.createIndex({"a.b": 1}); +t.ensureIndex({"a.b": 1}); t.insert({_id: 0, a: [{b: 1}, {b: 2}]}); t.insert({_id: 1, a: [{b: 2}, {b: 4}]}); cursor = @@ -199,7 +199,7 @@ assert.eq(2, cursor.itcount(), "case 14"); // Case 15: $or below $elemMatch. t.drop(); -t.createIndex({"a.b": 1}); +t.ensureIndex({"a.b": 1}); t.insert({_id: 0, a: [{b: 1}, {b: 2}]}); t.insert({_id: 1, a: [{b: 2}, {b: 4}]}); t.insert({_id: 2, a: {b: 4}}); @@ -208,7 +208,7 @@ assert.eq(2, cursor.itcount(), "case 15"); // Case 16: $or below $elemMatch with INEXACT_COVERED. t.drop(); -t.createIndex({"a.b": 1}); +t.ensureIndex({"a.b": 1}); t.insert({_id: 0, a: [{b: "x"}, {b: "y"}]}); t.insert({_id: 1, a: [{b: "y"}, {b: ["y", "z"]}]}); t.insert({_id: 2, a: {b: ["y", "z"]}}); @@ -217,7 +217,7 @@ assert.eq(2, cursor.itcount(), "case 16"); // Case 17: case from SERVER-14030. t.drop(); -t.createIndex({number: 1}); +t.ensureIndex({number: 1}); t.insert({number: null, user_id: 1}); t.insert({number: 2, user_id: 1}); t.insert({number: 1, user_id: 1}); @@ -226,7 +226,7 @@ assert.eq(3, cursor.itcount(), "case 17"); // Case 18: $in with EXACT and INEXACT_COVERED. t.drop(); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); t.insert({_id: 0, name: "thomas"}); t.insert({_id: 1, name: "alexandra"}); cursor = t.find({name: {$in: ["thomas", /^alexand(er|ra)/]}}); @@ -234,7 +234,7 @@ assert.eq(2, cursor.itcount(), "case 18"); // Case 19: $in with EXACT, INEXACT_COVERED, and INEXACT_FETCH. t.drop(); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); t.insert({_id: 0, name: "thomas"}); t.insert({_id: 1, name: "alexandra"}); t.insert({_id: 2}); @@ -243,8 +243,8 @@ assert.eq(3, cursor.itcount(), "case 19"); // Case 20: $in with EXACT, INEXACT_COVERED, and INEXACT_FETCH, two indices. t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); t.insert({_id: 0, a: "x", b: "y"}); t.insert({_id: 1, a: "z", b: "z"}); t.insert({_id: 2}); @@ -256,7 +256,7 @@ assert.eq(5, cursor.itcount(), "case 19"); // Case 21: two $geoWithin that collapse to a single GEO index scan. t.drop(); -t.createIndex({loc: "2dsphere"}); +t.ensureIndex({loc: "2dsphere"}); t.insert({_id: 0, loc: {type: "Point", coordinates: [40, 5]}}); t.insert({_id: 1, loc: {type: "Point", coordinates: [0, 0]}}); cursor = t.find({ diff --git a/jstests/core/ora.js b/jstests/core/ora.js index ca07516cae3..06d8f39c48f 100644 --- a/jstests/core/ora.js +++ b/jstests/core/ora.js @@ -19,7 +19,7 @@ assert.eq.automsg("10", "t.find({$or: [{$where: 'this.x === 2'}, {x: {$ne: 2}}]} // geo t.drop(); -t.createIndex({loc: "2d"}); +t.ensureIndex({loc: "2d"}); assert.throws(function() { t.find({$or: [{loc: {$near: [11, 11]}}]}).limit(1).next(); diff --git a/jstests/core/orb.js b/jstests/core/orb.js index aa75bb97e0b..345ac92d26e 100644 --- a/jstests/core/orb.js +++ b/jstests/core/orb.js @@ -4,14 +4,14 @@ var t = db.jstests_orb; t.drop(); t.save({a: 1}); -t.createIndex({a: -1}); +t.ensureIndex({a: -1}); assert.eq.automsg("1", "t.count( {$or: [ { a: { $gt:0,$lt:2 } }, { a: { $gt:-1,$lt:3 } } ] } )"); t.drop(); t.save({a: 1, b: 1}); -t.createIndex({a: 1, b: -1}); +t.ensureIndex({a: 1, b: -1}); assert.eq.automsg("1", "t.count( {$or: [ { a: { $gt:0,$lt:2 } }, { a: { $gt:-1,$lt:3 } } ] } )"); assert.eq.automsg( diff --git a/jstests/core/orc.js b/jstests/core/orc.js index 001d6f4bc9f..dc46d6de4ad 100644 --- a/jstests/core/orc.js +++ b/jstests/core/orc.js @@ -20,7 +20,7 @@ t.drop(); // possible to write a more // robust test. -t.createIndex({a: -1, b: 1, c: 1}); +t.ensureIndex({a: -1, b: 1, c: 1}); // sanity test t.save({a: null, b: 4, c: 4}); diff --git a/jstests/core/ord.js b/jstests/core/ord.js index 4a76f831246..ddbae540ffc 100644 --- a/jstests/core/ord.js +++ b/jstests/core/ord.js @@ -16,8 +16,8 @@ load("jstests/libs/fixture_helpers.js"); // For FixtureHelpers. const t = db.jstests_ord; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); for (let i = 0; i < 80; ++i) { t.save({a: 1}); diff --git a/jstests/core/ore.js b/jstests/core/ore.js index 756db6215c5..959f43f5101 100644 --- a/jstests/core/ore.js +++ b/jstests/core/ore.js @@ -4,8 +4,8 @@ t = db.jstests_ore; t.drop(); -t.createIndex({a: -1}); -t.createIndex({b: 1}); +t.ensureIndex({a: -1}); +t.ensureIndex({b: 1}); t.save({a: 1, b: 1}); t.save({a: 2, b: 1}); diff --git a/jstests/core/org.js b/jstests/core/org.js index 0c6808330c8..7479db062e4 100644 --- a/jstests/core/org.js +++ b/jstests/core/org.js @@ -5,8 +5,8 @@ t = db.jstests_org; t.drop(); -t.createIndex({a: 1}, {sparse: true}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}, {sparse: true}); +t.ensureIndex({b: 1}); t.remove({}); t.save({a: 1, b: 2}); diff --git a/jstests/core/orh.js b/jstests/core/orh.js index 91ce121e5a4..1ceed1d501f 100644 --- a/jstests/core/orh.js +++ b/jstests/core/orh.js @@ -5,8 +5,8 @@ t = db.jstests_orh; t.drop(); -t.createIndex({a: 1}, {sparse: true}); -t.createIndex({b: 1, a: 1}); +t.ensureIndex({a: 1}, {sparse: true}); +t.ensureIndex({b: 1, a: 1}); t.remove({}); t.save({b: 2}); diff --git a/jstests/core/orj.js b/jstests/core/orj.js index deee0c4821c..0ec304d9e52 100644 --- a/jstests/core/orj.js +++ b/jstests/core/orj.js @@ -84,26 +84,26 @@ function check() { check(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); check(); t.dropIndexes(); -t.createIndex({b: 1}); +t.ensureIndex({b: 1}); check(); t.dropIndexes(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); check(); t.dropIndexes(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); check(); t.dropIndexes(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); +t.ensureIndex({a: 1, b: 1}); check(); function checkHinted(hint) { diff --git a/jstests/core/ork.js b/jstests/core/ork.js index 9079d3819ba..7f203c74e5f 100644 --- a/jstests/core/ork.js +++ b/jstests/core/ork.js @@ -6,7 +6,7 @@ t = db.jstests_ork; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: [1, 2], b: 5}); t.save({a: [2, 4], b: 5}); diff --git a/jstests/core/oro.js b/jstests/core/oro.js index aa884d306c6..80684869f6d 100644 --- a/jstests/core/oro.js +++ b/jstests/core/oro.js @@ -13,7 +13,7 @@ orClauses = []; for (idxKey = 'a'; idxKey <= 'aaaaaaaaaa'; idxKey += 'a') { idx = {}; idx[idxKey] = 1; - t.createIndex(idx); + t.ensureIndex(idx); for (i = 0; i < 200; ++i) { t.insert(idx); } diff --git a/jstests/core/orp.js b/jstests/core/orp.js index a2918fc5a56..a706d6f4c1a 100644 --- a/jstests/core/orp.js +++ b/jstests/core/orp.js @@ -4,9 +4,9 @@ t = db.jstests_orp; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); -t.createIndex({c: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); +t.ensureIndex({c: 1}); for (i = 0; i < 200; ++i) { t.save({a: 1, b: 1}); @@ -23,7 +23,7 @@ assert.eq(201, t.count({$or: [{a: 1}, {c: 1}, {b: 1}]})); // Deduping results that would normally be index only matches on overlapping and double scanned $or // field regions. t.drop(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); for (i = 0; i < 16; ++i) { for (j = 0; j < 16; ++j) { t.save({a: i, b: j}); @@ -33,8 +33,8 @@ assert.eq(16 * 16, t.count({$or: [{a: {$gte: 0}, b: {$gte: 0}}, {a: {$lte: 16}, // Deduping results from a clause that completed before the multi cursor takeover. t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); t.save({a: 1, b: 200}); for (i = 0; i < 200; ++i) { t.save({b: i}); diff --git a/jstests/core/profile_list_indexes.js b/jstests/core/profile_list_indexes.js index 92389bf5642..359dd9e85cf 100644 --- a/jstests/core/profile_list_indexes.js +++ b/jstests/core/profile_list_indexes.js @@ -19,7 +19,7 @@ const numIndexes = 5; for (let i = 0; i < numIndexes; ++i) { let indexSpec = {}; indexSpec["fakeField_" + i] = 1; - assert.commandWorked(testColl.createIndex(indexSpec)); + assert.commandWorked(testColl.ensureIndex(indexSpec)); } testDB.setProfilingLevel(2); diff --git a/jstests/core/proj_key1.js b/jstests/core/proj_key1.js index 51ca23d0c37..af6d6d9d9fe 100644 --- a/jstests/core/proj_key1.js +++ b/jstests/core/proj_key1.js @@ -13,7 +13,7 @@ for (i = 0; i < 10; i++) { t.insert({a: i, b: i}); } -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(as, t.find({a: {$gte: 0}}, {a: 1, _id: 0}).sort({a: 1}).toArray()); assert.eq(as, t.find({a: {$gte: 0}}, {a: 1, _id: 0}).sort({a: 1}).batchSize(2).toArray()); diff --git a/jstests/core/queryoptimizera.js b/jstests/core/queryoptimizera.js index 55d0d5c424a..5daccbba232 100644 --- a/jstests/core/queryoptimizera.js +++ b/jstests/core/queryoptimizera.js @@ -83,7 +83,7 @@ t.find({_id: 0, a: 0}).itcount(); assertNoNewWarnings(); // Warnings should not be printed when an index is added on _id. -t.createIndex({_id: 1}); +t.ensureIndex({_id: 1}); t.find({_id: 0}).itcount(); assertNoNewWarnings(); diff --git a/jstests/core/record_store_count.js b/jstests/core/record_store_count.js index f89f1cfea17..89dcf8d4cdc 100644 --- a/jstests/core/record_store_count.js +++ b/jstests/core/record_store_count.js @@ -15,7 +15,7 @@ coll.drop(); assert.commandWorked(coll.insert({x: 0})); assert.commandWorked(coll.insert({x: 1})); -assert.commandWorked(coll.createIndex({x: 1})); +assert.commandWorked(coll.ensureIndex({x: 1})); // // Logically empty predicates should use the record store's count. @@ -78,7 +78,7 @@ const kNewIndexSpec = { x: 1, _id: 1 }; -assert.commandWorked(coll.createIndex(kNewIndexSpec)); +assert.commandWorked(coll.ensureIndex(kNewIndexSpec)); testExplainAndExpectStage({ expectedStages: ["COUNT", "SHARDING_FILTER"], unexpectedStages: ["FETCH"], diff --git a/jstests/core/regex3.js b/jstests/core/regex3.js index 158d0607647..46b18c03028 100644 --- a/jstests/core/regex3.js +++ b/jstests/core/regex3.js @@ -14,7 +14,7 @@ t.save({name: "aaron"}); assert.eq(2, t.find({name: /^e.*/}).itcount(), "no index count"); assert.eq( 4, t.find({name: /^e.*/}).explain(true).executionStats.totalDocsExamined, "no index explain"); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); assert.eq(2, t.find({name: /^e.*/}).itcount(), "index count"); assert.eq(2, t.find({name: /^e.*/}).explain(true).executionStats.totalKeysExamined, @@ -28,7 +28,7 @@ t.save({name: "ac"}); t.save({name: "c"}); assert.eq(3, t.find({name: /^aa*/}).itcount(), "B ni"); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); assert.eq(3, t.find({name: /^aa*/}).itcount(), "B i 1"); assert.eq(4, t.find({name: /^aa*/}).explain(true).executionStats.totalKeysExamined, "B i 1 e"); @@ -39,5 +39,5 @@ t.drop(); t.save({name: ""}); assert.eq(1, t.find({name: /^a?/}).itcount(), "C 1"); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); assert.eq(1, t.find({name: /^a?/}).itcount(), "C 2"); diff --git a/jstests/core/regex4.js b/jstests/core/regex4.js index 0e631082352..4ced6d06924 100644 --- a/jstests/core/regex4.js +++ b/jstests/core/regex4.js @@ -17,7 +17,7 @@ assert.eq( // assert.eq( 2 , t.find( { name : { $ne : /^e.*/ } } ).count() , "no index count ne" ); // // SERVER-251 -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); assert.eq(2, t.find({name: /^e.*/}).count(), "index count"); assert.eq(2, diff --git a/jstests/core/regex5.js b/jstests/core/regex5.js index d0836a62686..69537e149e5 100644 --- a/jstests/core/regex5.js +++ b/jstests/core/regex5.js @@ -31,7 +31,7 @@ doit = function() { }; doit(); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); print("now indexed"); doit(); diff --git a/jstests/core/regex6.js b/jstests/core/regex6.js index f21152d8c55..7af6c7d8400 100644 --- a/jstests/core/regex6.js +++ b/jstests/core/regex6.js @@ -14,7 +14,7 @@ t.save({name: "bob"}); t.save({name: "aaron"}); t.save({name: "[with]some?symbols"}); -t.createIndex({name: 1}); +t.ensureIndex({name: 1}); assert.eq(0, t.find({name: /^\//}).count(), "index count"); assert.eq( diff --git a/jstests/core/regex7.js b/jstests/core/regex7.js index f864f29be8e..290cbe387a9 100644 --- a/jstests/core/regex7.js +++ b/jstests/core/regex7.js @@ -17,7 +17,7 @@ assert.eq(/^b/, t.findOne({r: /^b/}).r, '3 1 a'); assert.eq(1, t.count({r: /^b/}), '3 2 a'); // with index -t.createIndex({r: 1}); +t.ensureIndex({r: 1}); assert.eq(/^a/, t.findOne({r: /^a/}).r, '1 1 b'); assert.eq(1, t.count({r: /^a/}), '1 2 b'); assert.eq(/^a/i, t.findOne({r: /^a/i}).r, '2 1 b'); diff --git a/jstests/core/regex8.js b/jstests/core/regex8.js index d65a6836b26..c92e82e4aa6 100644 --- a/jstests/core/regex8.js +++ b/jstests/core/regex8.js @@ -20,5 +20,5 @@ function test(msg) { test("A"); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); test("B"); diff --git a/jstests/core/regex_embed1.js b/jstests/core/regex_embed1.js index c74ffb4aa32..baaa8937962 100644 --- a/jstests/core/regex_embed1.js +++ b/jstests/core/regex_embed1.js @@ -23,5 +23,5 @@ function test(m) { test("A"); -t.createIndex({"a.x": 1}); +t.ensureIndex({"a.x": 1}); test("B"); diff --git a/jstests/core/regexa.js b/jstests/core/regexa.js index 694436e87a8..b56e2cf405e 100644 --- a/jstests/core/regexa.js +++ b/jstests/core/regexa.js @@ -13,7 +13,7 @@ function check() { t.save({a: 'a'}); check(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); if (1) { // SERVER-3298 check(); } diff --git a/jstests/core/regexc.js b/jstests/core/regexc.js index e9e2ba613aa..d7df4f7d574 100644 --- a/jstests/core/regexc.js +++ b/jstests/core/regexc.js @@ -7,7 +7,7 @@ var t = db.jstests_regexc; // $and using same index twice t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: "0"}); t.save({a: "1"}); t.save({a: "10"}); @@ -15,7 +15,7 @@ assert.eq(1, t.find({$and: [{a: /0/}, {a: /1/}]}).itcount()); // implicit $and using compound index twice t.drop(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); t.save({a: "0", b: "1"}); t.save({a: "10", b: "10"}); t.save({a: "10", b: "2"}); @@ -23,7 +23,7 @@ assert.eq(2, t.find({a: /0/, b: /1/}).itcount()); // $or using same index twice t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({a: "0"}); t.save({a: "1"}); t.save({a: "2"}); diff --git a/jstests/core/remove.js b/jstests/core/remove.js index f08792aeca5..37754c74190 100644 --- a/jstests/core/remove.js +++ b/jstests/core/remove.js @@ -6,7 +6,7 @@ t = db.removetest; function f(n, dir) { - t.createIndex({x: dir || 1}); + t.ensureIndex({x: dir || 1}); for (i = 0; i < n; i++) t.save({x: 3, z: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}); diff --git a/jstests/core/remove2.js b/jstests/core/remove2.js index 4193b8dd11f..d01c1e2e58c 100644 --- a/jstests/core/remove2.js +++ b/jstests/core/remove2.js @@ -38,10 +38,10 @@ f(); t.drop(); g(); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); t.remove({}); f(); t.drop(); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); g(); })(); diff --git a/jstests/core/remove6.js b/jstests/core/remove6.js index f60200a8d81..b91d28fa4e5 100644 --- a/jstests/core/remove6.js +++ b/jstests/core/remove6.js @@ -23,7 +23,7 @@ function test(n, idx) { pop(); assert.eq(N, t.count(), n + " A " + idx); if (idx) - t.createIndex(idx); + t.ensureIndex(idx); var res = del(); assert(!res.hasWriteError(), "error deleting: " + res.toString()); assert.eq(0, t.count(), n + " B " + idx); diff --git a/jstests/core/remove7.js b/jstests/core/remove7.js index 9cc86329990..4a1548fbce2 100644 --- a/jstests/core/remove7.js +++ b/jstests/core/remove7.js @@ -18,7 +18,7 @@ for (i = 0; i < 1000; i++) { t.save({tags: getTags()}); } -t.createIndex({tags: 1}); +t.ensureIndex({tags: 1}); for (i = 0; i < 200; i++) { for (var j = 0; j < 10; j++) diff --git a/jstests/core/remove9.js b/jstests/core/remove9.js index 4962dd9a06f..dc3f84a9c34 100644 --- a/jstests/core/remove9.js +++ b/jstests/core/remove9.js @@ -13,7 +13,7 @@ const t = db.jstests_remove9; t.drop(); -t.createIndex({i: 1}); +t.ensureIndex({i: 1}); const bulk = t.initializeUnorderedBulkOp(); for (let i = 0; i < 1000; ++i) { diff --git a/jstests/core/removea.js b/jstests/core/removea.js index 9fd489b7005..2c45ee665f4 100644 --- a/jstests/core/removea.js +++ b/jstests/core/removea.js @@ -10,7 +10,7 @@ Random.setRandomSeed(); for (let v = 0; v < 2; ++v) { // Try each index version. t.drop(); - t.createIndex({a: 1}, {v: v}); + t.ensureIndex({a: 1}, {v: v}); const S = 100; const B = 100; for (let x = 0; x < S; x++) { diff --git a/jstests/core/removeb.js b/jstests/core/removeb.js index d4ea12aa8f6..b81c0818d21 100644 --- a/jstests/core/removeb.js +++ b/jstests/core/removeb.js @@ -13,7 +13,7 @@ const t = db.jstests_removeb; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); // Make the index multikey to trigger cursor dedup checking. t.insert({a: [-1, -2]}); diff --git a/jstests/core/removec.js b/jstests/core/removec.js index 560f7405de3..500437e8891 100644 --- a/jstests/core/removec.js +++ b/jstests/core/removec.js @@ -8,7 +8,7 @@ t = db.jstests_removec; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); /** @return an array containing a sequence of numbers from i to i + 10. */ function runStartingWith(i) { diff --git a/jstests/core/rename.js b/jstests/core/rename.js index a8d888393b5..08d254bbe29 100644 --- a/jstests/core/rename.js +++ b/jstests/core/rename.js @@ -12,8 +12,8 @@ c.drop(); a.save({a: 1}); a.save({a: 2}); -a.createIndex({a: 1}); -a.createIndex({b: 1}); +a.ensureIndex({a: 1}); +a.ensureIndex({b: 1}); c.save({a: 100}); assert.commandFailed( diff --git a/jstests/core/rename4.js b/jstests/core/rename4.js index 98a9dd80d11..1ce3b30f177 100644 --- a/jstests/core/rename4.js +++ b/jstests/core/rename4.js @@ -124,7 +124,7 @@ good({a: 1, c: 4}, {$rename: {b: 'c.d'}}, {a: 1, c: 4}); // check index t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); function l(start, mod, query, expected) { t.remove({}); diff --git a/jstests/core/rename5.js b/jstests/core/rename5.js index 3d5646c7ee5..357d67fc9ee 100644 --- a/jstests/core/rename5.js +++ b/jstests/core/rename5.js @@ -5,7 +5,7 @@ t = db.jstests_rename5; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); t.save({b: 1}); t.update({}, {$rename: {a: 'b'}}); diff --git a/jstests/core/rename6.js b/jstests/core/rename6.js index 1122623c165..faa36a448dd 100644 --- a/jstests/core/rename6.js +++ b/jstests/core/rename6.js @@ -17,7 +17,7 @@ const dbd = testDB.getCollection(d); dbc.drop(); dbd.drop(); -dbc.createIndex({ +dbc.ensureIndex({ "name": 1, "date": 1, "time": 1, diff --git a/jstests/core/rename7.js b/jstests/core/rename7.js index a538f36e2dc..8f209e83acd 100644 --- a/jstests/core/rename7.js +++ b/jstests/core/rename7.js @@ -28,8 +28,8 @@ b.drop(); a.save({a: 1}); a.save({a: 2}); a.save({a: 3}); -a.createIndex({a: 1}); -a.createIndex({b: 1}); +a.ensureIndex({a: 1}); +a.ensureIndex({b: 1}); assert.commandWorked(admin.runCommand({renameCollection: "db_a.rename7", to: "db_b.rename7"})); diff --git a/jstests/core/return_key.js b/jstests/core/return_key.js index 96c6284ebf4..9d30477bd54 100644 --- a/jstests/core/return_key.js +++ b/jstests/core/return_key.js @@ -24,8 +24,8 @@ assert.commandWorked(coll.insert({a: 1, b: 3})); assert.commandWorked(coll.insert({a: 2, b: 2})); assert.commandWorked(coll.insert({a: 3, b: 1})); -assert.commandWorked(coll.createIndex({a: 1})); -assert.commandWorked(coll.createIndex({b: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({b: 1})); // Basic returnKey. results = coll.find().hint({a: 1}).sort({a: 1}).returnKey().toArray(); diff --git a/jstests/core/server14747.js b/jstests/core/server14747.js index c792f214259..f9a650defa4 100644 --- a/jstests/core/server14747.js +++ b/jstests/core/server14747.js @@ -10,8 +10,8 @@ var t = db.jstests_server14747; t.drop(); -t.createIndex({a: 1, b: 1}); -t.createIndex({a: 1, c: 1}); +t.ensureIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, c: 1}); t.insert({a: 1}); for (var i = 0; i < 10; i++) { t.find({a: 1}).explain(true); diff --git a/jstests/core/server14753.js b/jstests/core/server14753.js index 4fac2e06485..e8de183f2d7 100644 --- a/jstests/core/server14753.js +++ b/jstests/core/server14753.js @@ -7,8 +7,8 @@ var t = db.jstests_server14753; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); for (var i = 0; i < 20; i++) { t.insert({b: i}); } diff --git a/jstests/core/server9547.js b/jstests/core/server9547.js index 5e2d6aba566..66b17644e15 100644 --- a/jstests/core/server9547.js +++ b/jstests/core/server9547.js @@ -8,7 +8,7 @@ for (var i = 0; i < 10; i++) { t.save({a: i}); } -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); // note: max() value is exclusive upper bound assert.eq(4, t.find({}).max({a: 4}).hint({a: 1}).toArray().length, "no order"); diff --git a/jstests/core/set_type_change.js b/jstests/core/set_type_change.js index a0976b3ea44..12035cc39a9 100644 --- a/jstests/core/set_type_change.js +++ b/jstests/core/set_type_change.js @@ -12,7 +12,7 @@ var coll = db.set_type_change; coll.drop(); -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); assert.commandWorked(coll.insert({a: 2})); diff --git a/jstests/core/show_record_id.js b/jstests/core/show_record_id.js index 0f2df332354..d111858bc7d 100644 --- a/jstests/core/show_record_id.js +++ b/jstests/core/show_record_id.js @@ -25,7 +25,7 @@ t.save({}); checkResults(t.find().batchSize(2).showRecordId().toArray()); // Check with a covered index. -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); checkResults(t.find({}, {_id: 0, a: 1}).hint({a: 1}).showRecordId().toArray()); checkResults(t.find({}, {_id: 0, a: 1}).hint({a: 1}).showRecordId().toArray()); diff --git a/jstests/core/skip1.js b/jstests/core/skip1.js index 3b99e6b4cdd..ae8f589d616 100644 --- a/jstests/core/skip1.js +++ b/jstests/core/skip1.js @@ -6,7 +6,7 @@ var t = db.jstests_skip1; if (0) { // SERVER-2845 t.drop(); - t.createIndex({a: 1}); + t.ensureIndex({a: 1}); t.save({a: 5}); t.save({a: 5}); t.save({a: 5}); diff --git a/jstests/core/sort1.js b/jstests/core/sort1.js index 2a11771fd16..39c8d3d333d 100644 --- a/jstests/core/sort1.js +++ b/jstests/core/sort1.js @@ -22,7 +22,7 @@ for (var pass = 0; pass < 2; pass++) { assert(coll.find().sort({x: -1})[1].x == 3); assert.eq(coll.find().sort({x: -1}).skip(0)[0].x, 5); assert.eq(coll.find().sort({x: -1}).skip(1)[0].x, 3); - coll.createIndex({x: 1}); + coll.ensureIndex({x: 1}); } assert(coll.validate().valid); @@ -38,7 +38,7 @@ for (var pass = 0; pass < 2; pass++) { assert.eq("a", coll.find().sort({'x': 1}).next().x, "c.2"); assert.eq("zed", coll.find().sort({'x': -1}).limit(1).next().x, "c.3"); assert.eq("zed", coll.find().sort({'x': -1}).next().x, "c.4"); - coll.createIndex({x: 1}); + coll.ensureIndex({x: 1}); } assert(coll.validate().valid); diff --git a/jstests/core/sort10.js b/jstests/core/sort10.js index 6819c76fa5b..167cf74bbfc 100644 --- a/jstests/core/sort10.js +++ b/jstests/core/sort10.js @@ -11,7 +11,7 @@ function checkSorting1(opts) { var d = new Date(-50); for (var pass = 0; pass < 2; pass++) { assert(t.find().sort({x: 1})[0].x.valueOf() == d.valueOf()); - t.createIndex({x: 1}, opts); + t.ensureIndex({x: 1}, opts); t.insert({x: new Date()}); } } @@ -42,10 +42,10 @@ reverseDates = dates.slice(0).reverse(); checkSorting2(dates, 1); checkSorting2(reverseDates, -1); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); checkSorting2(dates, 1); checkSorting2(reverseDates, -1); t.dropIndexes(); -t.createIndex({x: -1}); +t.ensureIndex({x: -1}); checkSorting2(dates, 1); checkSorting2(reverseDates, -1); diff --git a/jstests/core/sort2.js b/jstests/core/sort2.js index c584dc48114..ca2d3dc80bf 100644 --- a/jstests/core/sort2.js +++ b/jstests/core/sort2.js @@ -15,7 +15,7 @@ for (var pass = 0; pass < 2; pass++) { assert(res[0].y.a == 2); assert(res[1].y.a == 5); assert(res.length == 4); - t.createIndex({"y.a": 1}); + t.ensureIndex({"y.a": 1}); } assert(t.validate().valid); @@ -31,5 +31,5 @@ for (var pass = 0; pass < 2; pass++) { for (var i = 0; i < good.length; i++) { assert(good[i].toString() == res[i].x.toString()); } - t.createIndex({x: 1}); + t.ensureIndex({x: 1}); } diff --git a/jstests/core/sort4.js b/jstests/core/sort4.js index e74df1f4bd6..0afe2cebe80 100644 --- a/jstests/core/sort4.js +++ b/jstests/core/sort4.js @@ -36,10 +36,10 @@ nice({name: 1, prename: 1}, "A,AB,AC,BB,BD", "e1"); assert.commandWorked(coll.insert({name: 'C'})); nice({name: 1, prename: 1}, "A,AB,AC,BB,BD,C", "e2"); // SERVER-282 -assert.commandWorked(coll.createIndex({name: 1, prename: 1})); +assert.commandWorked(coll.ensureIndex({name: 1, prename: 1})); nice({name: 1, prename: 1}, "A,AB,AC,BB,BD,C", "e2ia"); // SERVER-282 assert.commandWorked(coll.dropIndexes()); -assert.commandWorked(coll.createIndex({name: 1})); +assert.commandWorked(coll.ensureIndex({name: 1})); nice({name: 1, prename: 1}, "A,AB,AC,BB,BD,C", "e2ib"); // SERVER-282 }()); diff --git a/jstests/core/sort5.js b/jstests/core/sort5.js index be40802ade4..2f604225d7a 100644 --- a/jstests/core/sort5.js +++ b/jstests/core/sort5.js @@ -16,7 +16,7 @@ assert.eq([4, 2, 3, 1], return z.x; }), "A no index"); -t.createIndex({"y.b": 1, "y.a": -1}); +t.ensureIndex({"y.b": 1, "y.a": -1}); assert.eq([4, 2, 3, 1], t.find().sort({"y.b": 1, "y.a": -1}).map(function(z) { return z.x; @@ -31,7 +31,7 @@ assert.eq([4, 2, 3, 1], return z.x; }), "B no index"); -t.createIndex({"y.b": 1, "_id": -1}); +t.ensureIndex({"y.b": 1, "_id": -1}); assert.eq([4, 2, 3, 1], t.find().sort({"y.b": 1, _id: -1}).map(function(z) { return z.x; diff --git a/jstests/core/sort6.js b/jstests/core/sort6.js index f2658bbcbad..2373969f7f6 100644 --- a/jstests/core/sort6.js +++ b/jstests/core/sort6.js @@ -16,7 +16,7 @@ t.insert({_id: 3, c: 2}); assert.eq([3, 2, 1], get(-1), "A1"); // SERVER-635 assert.eq([1, 2, 3], get(1), "A2"); -t.createIndex({c: 1}); +t.ensureIndex({c: 1}); assert.eq([3, 2, 1], get(-1), "B1"); assert.eq([1, 2, 3], get(1), "B2"); @@ -31,7 +31,7 @@ t.insert({_id: 3, c: 2}); assert.eq([3, 2, 1], get(-1), "C1"); // SERVER-635 assert.eq([1, 2, 3], get(1), "C2"); -t.createIndex({c: 1}); +t.ensureIndex({c: 1}); assert.eq([3, 2, 1], get(-1), "D1"); assert.eq([1, 2, 3], get(1), "X2"); diff --git a/jstests/core/sort8.js b/jstests/core/sort8.js index 65dc2c10fc2..75d393445a7 100644 --- a/jstests/core/sort8.js +++ b/jstests/core/sort8.js @@ -10,7 +10,7 @@ t.save({a: [1, 10]}); t.save({a: 5}); unindexedForward = t.find().sort({a: 1}).toArray(); unindexedReverse = t.find().sort({a: -1}).toArray(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); indexedForward = t.find().sort({a: 1}).hint({a: 1}).toArray(); indexedReverse = t.find().sort({a: -1}).hint({a: 1}).toArray(); @@ -25,7 +25,7 @@ assert.eq([1, 10], unindexedReverse[0].a); t.dropIndexes(); unindexedForward = t.find({a: {$gte: 5}}).sort({a: 1}).toArray(); unindexedReverse = t.find({a: {$lte: 5}}).sort({a: -1}).toArray(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); indexedForward = t.find({a: {$gte: 5}}).sort({a: 1}).hint({a: 1}).toArray(); indexedReverse = t.find({a: {$lte: 5}}).sort({a: -1}).hint({a: 1}).toArray(); diff --git a/jstests/core/sort_numeric.js b/jstests/core/sort_numeric.js index 5ff3e71a066..df4e914b87b 100644 --- a/jstests/core/sort_numeric.js +++ b/jstests/core/sort_numeric.js @@ -27,7 +27,7 @@ for (var pass = 0; pass < 2; pass++) { assert(t.find({a: 3.0}).count() == 1); assert(t.find({a: 3.0}).length() == 1); - t.createIndex({a: 1}); + t.ensureIndex({a: 1}); } assert(t.validate().valid); diff --git a/jstests/core/sortb.js b/jstests/core/sortb.js index 7f24592e84a..34fb94951e9 100644 --- a/jstests/core/sortb.js +++ b/jstests/core/sortb.js @@ -8,7 +8,7 @@ load("jstests/libs/fixture_helpers.js"); // For FixtureHelpers. const t = db.jstests_sortb; t.drop(); -t.createIndex({b: 1}); +t.ensureIndex({b: 1}); let i; for (i = 0; i < 100; ++i) { diff --git a/jstests/core/sortd.js b/jstests/core/sortd.js index e18671005e4..87c0453cd7a 100644 --- a/jstests/core/sortd.js +++ b/jstests/core/sortd.js @@ -21,7 +21,7 @@ t.drop(); t.save({a: [1, 2, 3, 4, 5]}); t.save({a: 10}); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq(2, t.find({a: {$gt: 0}}).sort({a: 1}).itcount()); assert.eq(2, t.find({a: {$gt: 0}, b: null}).sort({a: 1}).itcount()); @@ -38,7 +38,7 @@ for (i = 2; i <= 9; ++i) { for (i = 0; i < 30; ++i) { t.save({a: 100}); } -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); checkNumSorted(10, t.find({a: {$gte: 0, $lte: 10}}).sort({a: 1})); checkNumSorted(10, t.find({a: {$gte: 0, $lte: 10}, b: null}).sort({a: 1})); @@ -56,7 +56,7 @@ for (i = 2; i <= 199; ++i) { for (i = 0; i < 30; ++i) { t.save({a: 2000}); } -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); checkNumSorted(200, t.find({a: {$gte: 0, $lte: 200}}).sort({a: 1})); checkNumSorted(200, t.find({a: {$gte: 0, $lte: 200}, b: null}).sort({a: 1})); @@ -69,6 +69,6 @@ t.drop(); for (i = 399; i >= 0; --i) { t.save({a: i}); } -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); checkNumSorted(400, t.find({a: {$gte: 0, $lte: 400}, b: null}).batchSize(50).sort({a: 1})); diff --git a/jstests/core/sortf.js b/jstests/core/sortf.js index adb54f38b9c..6f34d80a59d 100644 --- a/jstests/core/sortf.js +++ b/jstests/core/sortf.js @@ -9,8 +9,8 @@ t = db.jstests_sortf; t.drop(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); for (i = 0; i < 100; ++i) { t.save({a: 0, b: 0}); diff --git a/jstests/core/sortg.js b/jstests/core/sortg.js index bdf44f4db7b..64edbce53d0 100644 --- a/jstests/core/sortg.js +++ b/jstests/core/sortg.js @@ -47,9 +47,9 @@ noMemoryException({$natural: 1}); assert.eq(1, t.getIndexes().length); -t.createIndex({a: 1}); -t.createIndex({b: 1}); -t.createIndex({c: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); +t.ensureIndex({c: 1}); assert.eq(4, t.getIndexes().length); diff --git a/jstests/core/sorth.js b/jstests/core/sorth.js index 41563caa205..4b5aa02c281 100644 --- a/jstests/core/sorth.js +++ b/jstests/core/sorth.js @@ -84,7 +84,7 @@ function reset(sort, index) { t.save({a: 2, b: 0}); t.save({a: 2, b: 3}); t.save({a: 2, b: 5}); - t.createIndex(index); + t.ensureIndex(index); _sort = sort; _hint = index; } diff --git a/jstests/core/sorti.js b/jstests/core/sorti.js index e30739b4867..b6518818683 100644 --- a/jstests/core/sorti.js +++ b/jstests/core/sorti.js @@ -20,6 +20,6 @@ function checkBOrder(query) { checkBOrder(t.find().sort({a: 1})); checkBOrder(t.find({}, {_id: 0, b: 1}).sort({a: 1})); -t.createIndex({b: 1}); +t.ensureIndex({b: 1}); checkBOrder(t.find({}, {_id: 0, b: 1}).sort({a: 1})); checkBOrder(t.find({}, {_id: 0, b: 1}).sort({a: 1}).hint({b: 1})); diff --git a/jstests/core/sortj.js b/jstests/core/sortj.js index a4e8dd599d4..58125c2c00c 100644 --- a/jstests/core/sortj.js +++ b/jstests/core/sortj.js @@ -11,7 +11,7 @@ load("jstests/libs/fixture_helpers.js"); // For FixtureHelpers. const t = db.jstests_sortj; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); const numShards = FixtureHelpers.numberOfShardsForCollection(t); diff --git a/jstests/core/sortk.js b/jstests/core/sortk.js index f1b055c2bcc..e207c8f1f78 100644 --- a/jstests/core/sortk.js +++ b/jstests/core/sortk.js @@ -23,7 +23,7 @@ function resetCollection() { } resetCollection(); -t.createIndex({a: 1, b: 1}); +t.ensureIndex({a: 1, b: 1}); function simpleQuery(extraFields, sort, hint) { query = {a: {$in: [1, 2]}}; @@ -93,7 +93,7 @@ assert.eq(3, simpleQueryWithLimit(-3).itcount()); // The index ordering is reversed. resetCollection(); -t.createIndex({a: 1, b: -1}); +t.ensureIndex({a: 1, b: -1}); // The sort order is consistent with the index order. assert.eq(5, simpleQuery({}, {b: -1}, {a: 1, b: -1}).limit(-1)[0].b); @@ -103,7 +103,7 @@ assert.eq(0, simpleQuery({}, {b: 1}, {a: 1, b: -1}).limit(-1)[0].b); // An equality constraint precedes the $in constraint. t.drop(); -t.createIndex({a: 1, b: 1, c: 1}); +t.ensureIndex({a: 1, b: 1, c: 1}); t.save({a: 0, b: 0, c: -1}); t.save({a: 0, b: 2, c: 1}); t.save({a: 1, b: 1, c: 1}); diff --git a/jstests/core/splitvector.js b/jstests/core/splitvector.js index 73903a45bb9..da117c7d3ef 100644 --- a/jstests/core/splitvector.js +++ b/jstests/core/splitvector.js @@ -111,7 +111,7 @@ assert.eq( // ------------------------- // Case 3: empty collection -f.createIndex({x: 1}); +f.ensureIndex({x: 1}); assert.eq( [], db.runCommand({splitVector: "test.jstests_splitvector", keyPattern: {x: 1}, maxChunkSize: 1}) @@ -122,7 +122,7 @@ assert.eq( // Case 4: uniform collection resetCollection(); -f.createIndex({x: 1}); +f.ensureIndex({x: 1}); var case4 = function() { // Get baseline document size @@ -156,7 +156,7 @@ case4(); // Case 5: limit number of split points resetCollection(); -f.createIndex({x: 1}); +f.ensureIndex({x: 1}); var case5 = function() { // Fill collection and get split vector for 1MB maxChunkSize @@ -180,7 +180,7 @@ case5(); // Case 6: limit number of objects in a chunk resetCollection(); -f.createIndex({x: 1}); +f.ensureIndex({x: 1}); var case6 = function() { // Fill collection and get split vector for 1MB maxChunkSize @@ -205,7 +205,7 @@ case6(); // [1111111111111111,2,3) resetCollection(); -f.createIndex({x: 1}); +f.ensureIndex({x: 1}); var case7 = function() { // Fill collection and get split vector for 1MB maxChunkSize @@ -227,7 +227,7 @@ case7(); // [1, 22222222222222, 3) resetCollection(); -f.createIndex({x: 1}); +f.ensureIndex({x: 1}); var case8 = function() { bulkInsertDocsFixedX(f, 9, filler, 1); @@ -251,7 +251,7 @@ case8(); // resetCollection(); -f.createIndex({x: 1}); +f.ensureIndex({x: 1}); var case9 = function() { f.save({x: 1}); @@ -286,51 +286,51 @@ case9(); // resetCollection(); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); case4(); resetCollection(); -f.createIndex({x: 1, y: -1, z: 1}); +f.ensureIndex({x: 1, y: -1, z: 1}); case4(); resetCollection(); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); case5(); resetCollection(); -f.createIndex({x: 1, y: -1, z: 1}); +f.ensureIndex({x: 1, y: -1, z: 1}); case5(); resetCollection(); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); case6(); resetCollection(); -f.createIndex({x: 1, y: -1, z: 1}); +f.ensureIndex({x: 1, y: -1, z: 1}); case6(); resetCollection(); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); case7(); resetCollection(); -f.createIndex({x: 1, y: -1, z: 1}); +f.ensureIndex({x: 1, y: -1, z: 1}); case7(); resetCollection(); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); case8(); resetCollection(); -f.createIndex({x: 1, y: -1, z: 1}); +f.ensureIndex({x: 1, y: -1, z: 1}); case8(); resetCollection(); -f.createIndex({x: 1, y: 1}); +f.ensureIndex({x: 1, y: 1}); case9(); resetCollection(); -f.createIndex({x: 1, y: -1, z: 1}); +f.ensureIndex({x: 1, y: -1, z: 1}); case9(); print("PASSED"); diff --git a/jstests/core/stages_and_hash.js b/jstests/core/stages_and_hash.js index e5260c6c1b1..aa91f27e542 100644 --- a/jstests/core/stages_and_hash.js +++ b/jstests/core/stages_and_hash.js @@ -13,9 +13,9 @@ for (var i = 0; i < N; ++i) { t.insert({foo: i, bar: N - i, baz: i}); } -t.createIndex({foo: 1}); -t.createIndex({bar: 1}); -t.createIndex({baz: 1}); +t.ensureIndex({foo: 1}); +t.ensureIndex({bar: 1}); +t.ensureIndex({baz: 1}); // Scan foo <= 20 ixscan1 = { diff --git a/jstests/core/stages_and_sorted.js b/jstests/core/stages_and_sorted.js index aa4a2fa08c1..97387d84064 100644 --- a/jstests/core/stages_and_sorted.js +++ b/jstests/core/stages_and_sorted.js @@ -23,9 +23,9 @@ for (var i = 0; i < N; ++i) { t.insert({baz: 12}); } -t.createIndex({foo: 1}); -t.createIndex({bar: 1}); -t.createIndex({baz: 1}); +t.ensureIndex({foo: 1}); +t.ensureIndex({bar: 1}); +t.ensureIndex({baz: 1}); // Scan foo == 1 ixscan1 = { diff --git a/jstests/core/stages_fetch.js b/jstests/core/stages_fetch.js index 032cc930cf8..48d761e53e7 100644 --- a/jstests/core/stages_fetch.js +++ b/jstests/core/stages_fetch.js @@ -13,7 +13,7 @@ for (var i = 0; i < N; ++i) { t.insert({foo: i, bar: N - i, baz: i}); } -t.createIndex({foo: 1}); +t.ensureIndex({foo: 1}); // 20 <= foo <= 30 // bar == 25 (not covered, should error.) diff --git a/jstests/core/stages_ixscan.js b/jstests/core/stages_ixscan.js index 86184206e33..78e22e997c4 100644 --- a/jstests/core/stages_ixscan.js +++ b/jstests/core/stages_ixscan.js @@ -13,8 +13,8 @@ for (var i = 0; i < N; ++i) { t.insert({foo: i, bar: N - i, baz: i}); } -t.createIndex({foo: 1}); -t.createIndex({foo: 1, baz: 1}); +t.ensureIndex({foo: 1}); +t.ensureIndex({foo: 1, baz: 1}); // Test that stageDebug fails if neither the keyPattern nor the index name are present. assert.commandFailed(db.runCommand({ diff --git a/jstests/core/stages_limit_skip.js b/jstests/core/stages_limit_skip.js index 00ba7aae4f0..b2621623260 100644 --- a/jstests/core/stages_limit_skip.js +++ b/jstests/core/stages_limit_skip.js @@ -13,7 +13,7 @@ for (var i = 0; i < N; ++i) { t.insert({foo: i, bar: N - i, baz: i}); } -t.createIndex({foo: 1}); +t.ensureIndex({foo: 1}); // foo <= 20, decreasing // Limit of 5 results. diff --git a/jstests/core/stages_mergesort.js b/jstests/core/stages_mergesort.js index 6679da3d5a5..c4c4125c1f3 100644 --- a/jstests/core/stages_mergesort.js +++ b/jstests/core/stages_mergesort.js @@ -14,8 +14,8 @@ for (var i = 0; i < N; ++i) { t.insert({baz: 1, bar: i}); } -t.createIndex({foo: 1, bar: 1}); -t.createIndex({baz: 1, bar: 1}); +t.ensureIndex({foo: 1, bar: 1}); +t.ensureIndex({baz: 1, bar: 1}); // foo == 1 // We would (internally) use "": MinKey and "": MaxKey for the bar index bounds. diff --git a/jstests/core/stages_or.js b/jstests/core/stages_or.js index d255404a21c..0fd78bdfc5c 100644 --- a/jstests/core/stages_or.js +++ b/jstests/core/stages_or.js @@ -13,9 +13,9 @@ for (var i = 0; i < N; ++i) { t.insert({foo: i, bar: N - i, baz: i}); } -t.createIndex({foo: 1}); -t.createIndex({bar: 1}); -t.createIndex({baz: 1}); +t.ensureIndex({foo: 1}); +t.ensureIndex({bar: 1}); +t.ensureIndex({baz: 1}); // baz >= 40 ixscan1 = { diff --git a/jstests/core/stages_sort.js b/jstests/core/stages_sort.js index 60f22c680eb..46b81662100 100644 --- a/jstests/core/stages_sort.js +++ b/jstests/core/stages_sort.js @@ -8,7 +8,7 @@ if (false) { t.insert({foo: i, bar: N - i}); } - t.createIndex({foo: 1}); + t.ensureIndex({foo: 1}); // Foo <= 20, descending. ixscan1 = { diff --git a/jstests/core/stages_text.js b/jstests/core/stages_text.js index 4b5379a0e4c..50182b04bb4 100644 --- a/jstests/core/stages_text.js +++ b/jstests/core/stages_text.js @@ -11,7 +11,7 @@ var collname = "stages_text"; t.save({x: "az b x"}); -t.createIndex({x: "text"}); +t.ensureIndex({x: "text"}); // We expect to retrieve 'b' res = db.runCommand({stageDebug: {collection: collname, plan: {text: {args: {search: "b"}}}}}); diff --git a/jstests/core/type1.js b/jstests/core/type1.js index 8066de2a5c4..aae040dee90 100644 --- a/jstests/core/type1.js +++ b/jstests/core/type1.js @@ -13,7 +13,7 @@ assert.eq(1, t.find({x: {$type: 1}}).count(), "A2"); assert.eq(3, t.find({x: {$type: 2}}).count(), "A3"); assert.eq(0, t.find({x: {$type: 3}}).count(), "A4"); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq(4, t.find().count(), "B1"); assert.eq(1, t.find({x: {$type: 1}}).count(), "B2"); diff --git a/jstests/core/type2.js b/jstests/core/type2.js index d93d313d60f..9c6baa37b94 100644 --- a/jstests/core/type2.js +++ b/jstests/core/type2.js @@ -15,5 +15,5 @@ function test() { } test(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); test();
\ No newline at end of file diff --git a/jstests/core/type3.js b/jstests/core/type3.js index 1b57e9bb989..6c2c71e2b0c 100644 --- a/jstests/core/type3.js +++ b/jstests/core/type3.js @@ -8,7 +8,7 @@ t = db.jstests_type3; t.drop(); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); // Type Object t.save({a: {'': ''}}); diff --git a/jstests/core/uniqueness.js b/jstests/core/uniqueness.js index af4dfb1507f..d138f59d0ae 100644 --- a/jstests/core/uniqueness.js +++ b/jstests/core/uniqueness.js @@ -40,7 +40,7 @@ db.jstests_uniqueness2.drop(); db.jstests_uniqueness2.insert({a: 3}); db.jstests_uniqueness2.insert({a: 3}); assert.eq(2, db.jstests_uniqueness2.count()); -res = db.jstests_uniqueness2.createIndex({a: 1}, true); +res = db.jstests_uniqueness2.ensureIndex({a: 1}, true); assert.commandFailed(res); assert(res.errmsg.match(/E11000/)); @@ -49,7 +49,7 @@ db.jstests_uniqueness2.drop(); db.jstests_uniqueness2.insert({a: 3}); db.jstests_uniqueness2.insert({a: 3}); assert.eq(2, db.jstests_uniqueness2.count()); -res = db.jstests_uniqueness2.createIndex({a: 1}, {unique: true, background: true}); +res = db.jstests_uniqueness2.ensureIndex({a: 1}, {unique: true, background: true}); assert.commandFailed(res); assert(res.errmsg.match(/E11000/)); diff --git a/jstests/core/update2.js b/jstests/core/update2.js index 080875b50bd..558e3c7f558 100644 --- a/jstests/core/update2.js +++ b/jstests/core/update2.js @@ -12,7 +12,7 @@ assert.eq(6, f.findOne().a); f.drop(); f.save({a: 4}); -f.createIndex({a: 1}); +f.ensureIndex({a: 1}); f.update({a: 4}, {$inc: {a: 2}}); assert.eq(6, f.findOne().a); diff --git a/jstests/core/update5.js b/jstests/core/update5.js index fafc0d72ce0..7f41096889c 100644 --- a/jstests/core/update5.js +++ b/jstests/core/update5.js @@ -26,7 +26,7 @@ function go(key) { var ik = {}; for (k in key) ik[k] = 1; - t.createIndex(ik); + t.ensureIndex(ik); t.update(key, {$inc: {n: 1}}, true); check(4, "D"); diff --git a/jstests/core/update7.js b/jstests/core/update7.js index 30dd79951dc..cb15f211d63 100644 --- a/jstests/core/update7.js +++ b/jstests/core/update7.js @@ -49,8 +49,8 @@ assert.eq("3,6", s(), "B3"); t.update({b: 3}, {$inc: {x: 1}}, false, true); assert.eq("3,6", s(), "B4"); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); t.update({a: 1}, {$inc: {x: 1}}, false, true); assert.eq("4,7", s(), "B5"); @@ -91,7 +91,7 @@ t.drop(); t.save({_id: 1, x: 1, a: [1, 2]}); t.save({_id: 2, x: 5, a: [2, 3]}); -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.eq("1,5", s(), "D1"); t.update({a: 1}, {$inc: {x: 1}}, false, true); @@ -134,7 +134,7 @@ t.save({x: 1}); t.save({x: 2}); t.save({x: 3}); -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); assert.eq("1,2,3", s(), "F1"); t.update({x: {$gt: 0}}, {$inc: {x: 5}}, false, true); diff --git a/jstests/core/update_arraymatch4.js b/jstests/core/update_arraymatch4.js index 3c087e53ca5..bda7de512b8 100644 --- a/jstests/core/update_arraymatch4.js +++ b/jstests/core/update_arraymatch4.js @@ -17,7 +17,7 @@ x.arr[0] = "A2"; t.update({arr: "A1"}, {$set: {"arr.$": "A2"}}); assert.eq(x, t.findOne(), "A2"); -t.createIndex({arr: 1}); +t.ensureIndex({arr: 1}); x.arr[0] = "A3"; t.update({arr: "A2"}, {$set: {"arr.$": "A3"}}); assert.eq(x, t.findOne(), "A3"); // SERVER-1055 diff --git a/jstests/core/update_arraymatch5.js b/jstests/core/update_arraymatch5.js index 4bddcb1ea26..eeca2598d1c 100644 --- a/jstests/core/update_arraymatch5.js +++ b/jstests/core/update_arraymatch5.js @@ -7,7 +7,7 @@ t = db.update_arraymatch5; t.drop(); t.insert({abc: {visible: true}, testarray: [{foobar_id: 316, visible: true, xxx: 1}]}); -t.createIndex({'abc.visible': 1, 'testarray.visible': 1, 'testarray.xxx': 1}); +t.ensureIndex({'abc.visible': 1, 'testarray.visible': 1, 'testarray.xxx': 1}); assert(t.findOne({'abc.visible': true, testarray: {'$elemMatch': {visible: true, xxx: 1}}}), "A1"); assert(t.findOne({testarray: {'$elemMatch': {visible: true, xxx: 1}}}), "A2"); diff --git a/jstests/core/update_arraymatch6.js b/jstests/core/update_arraymatch6.js index 1241753b866..ec318370561 100644 --- a/jstests/core/update_arraymatch6.js +++ b/jstests/core/update_arraymatch6.js @@ -16,5 +16,5 @@ function doTest() { doTest(); t.drop(); -t.createIndex({'a.id': 1}); +t.ensureIndex({'a.id': 1}); doTest();
\ No newline at end of file diff --git a/jstests/core/update_arraymatch7.js b/jstests/core/update_arraymatch7.js index cded4ba56f4..4ee9ed26f7c 100644 --- a/jstests/core/update_arraymatch7.js +++ b/jstests/core/update_arraymatch7.js @@ -20,5 +20,5 @@ function testPositionalInc() { testPositionalInc(); // Now check with a non multikey index. -t.createIndex({'a.b': 1}); +t.ensureIndex({'a.b': 1}); testPositionalInc(); diff --git a/jstests/core/update_arraymatch8.js b/jstests/core/update_arraymatch8.js index 88b9d3374e8..6340acdb2ab 100644 --- a/jstests/core/update_arraymatch8.js +++ b/jstests/core/update_arraymatch8.js @@ -12,7 +12,7 @@ // array.$.name t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'array.name': 1}); +t.ensureIndex({'array.name': 1}); t.insert({'array': [{'name': 'old'}]}); assert(t.findOne({'array.name': 'old'})); t.update({'array.name': 'old'}, {$set: {'array.$.name': 'new'}}); @@ -22,7 +22,7 @@ assert(!t.findOne({'array.name': 'old'})); // array.$ (failed in 2.2.2) t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'array.name': 1}); +t.ensureIndex({'array.name': 1}); t.insert({'array': [{'name': 'old'}]}); assert(t.findOne({'array.name': 'old'})); t.update({'array.name': 'old'}, {$set: {'array.$': {'name': 'new'}}}); @@ -32,7 +32,7 @@ assert(!t.findOne({'array.name': 'old'})); // array.0.name t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'array.name': 1}); +t.ensureIndex({'array.name': 1}); t.insert({'array': [{'name': 'old'}]}); assert(t.findOne({'array.name': 'old'})); t.update({'array.name': 'old'}, {$set: {'array.0.name': 'new'}}); @@ -42,7 +42,7 @@ assert(!t.findOne({'array.name': 'old'})); // array.0 (failed in 2.2.2) t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'array.name': 1}); +t.ensureIndex({'array.name': 1}); t.insert({'array': [{'name': 'old'}]}); assert(t.findOne({'array.name': 'old'})); t.update({'array.name': 'old'}, {$set: {'array.0': {'name': 'new'}}}); @@ -56,7 +56,7 @@ arr = new Array(); for (var i = 0; i < 20; i++) { arr.push({'name': 'old'}); } -t.createIndex({'array.name': 1}); +t.ensureIndex({'array.name': 1}); t.insert({_id: 0, 'array': arr}); assert(t.findOne({'array.name': 'old'})); t.update({_id: 0}, {$set: {'array.12.name': 'new'}}); @@ -71,7 +71,7 @@ arr = new Array(); for (var i = 0; i < 20; i++) { arr.push({'name': 'old'}); } -t.createIndex({'array.name': 1}); +t.ensureIndex({'array.name': 1}); t.insert({_id: 0, 'array': arr}); assert(t.findOne({'array.name': 'old'})); t.update({_id: 0}, {$set: {'array.12': {'name': 'new'}}}); @@ -82,7 +82,7 @@ assert(t.findOne({'array.name': 'old'})); // array.$.123a.name t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'array.123a.name': 1}); +t.ensureIndex({'array.123a.name': 1}); t.insert({'array': [{'123a': {'name': 'old'}}]}); assert(t.findOne({'array.123a.name': 'old'})); t.update({'array.123a.name': 'old'}, {$set: {'array.$.123a.name': 'new'}}); @@ -92,7 +92,7 @@ assert(!t.findOne({'array.123a.name': 'old'})); // array.$.123a t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'array.name': 1}); +t.ensureIndex({'array.name': 1}); t.insert({'array': [{'123a': {'name': 'old'}}]}); assert(t.findOne({'array.123a.name': 'old'})); t.update({'array.123a.name': 'old'}, {$set: {'array.$.123a': {'name': 'new'}}}); @@ -102,7 +102,7 @@ assert(!t.findOne({'array.123a.name': 'old'})); // array.0.123a.name t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'array.123a.name': 1}); +t.ensureIndex({'array.123a.name': 1}); t.insert({'array': [{'123a': {'name': 'old'}}]}); assert(t.findOne({'array.123a.name': 'old'})); t.update({'array.123a.name': 'old'}, {$set: {'array.0.123a.name': 'new'}}); @@ -112,7 +112,7 @@ assert(!t.findOne({'array.123a.name': 'old'})); // array.0.123a t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'array.name': 1}); +t.ensureIndex({'array.name': 1}); t.insert({'array': [{'123a': {'name': 'old'}}]}); assert(t.findOne({'array.123a.name': 'old'})); t.update({'array.123a.name': 'old'}, {$set: {'array.0.123a': {'name': 'new'}}}); @@ -122,7 +122,7 @@ assert(!t.findOne({'array.123a.name': 'old'})); // a.0.b t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'a.0.b': 1}); +t.ensureIndex({'a.0.b': 1}); t.insert({'a': [[{b: 'old'}]]}); assert(t.findOne({'a.0.0.b': 'old'})); assert(t.findOne({'a.0.b': 'old'})); @@ -133,7 +133,7 @@ assert(!t.findOne({'a.0.b': 'old'})); // a.0.b.c t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'a.0.b.c': 1}); +t.ensureIndex({'a.0.b.c': 1}); t.insert({'a': [{b: [{c: 'old'}]}]}); assert(t.findOne({'a.0.b.0.c': 'old'})); assert(t.findOne({'a.b.0.c': 'old'})); @@ -146,7 +146,7 @@ assert(!t.findOne({'a.0.b.c': 'old'})); // a.b.$ref t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'a.b.$ref': 1}); +t.ensureIndex({'a.b.$ref': 1}); t.insert({'a': [{'b': {'$ref': 'old', '$id': 0}}]}); assert(t.findOne({'a.b.$ref': 'old'})); assert(t.findOne({'a.0.b.$ref': 'old'})); @@ -157,8 +157,8 @@ assert(!t.findOne({'a.b.$ref': 'old'})); // a.b and a-b t = db.jstests_update_arraymatch8; t.drop(); -t.createIndex({'a.b': 1}); -t.createIndex({'a-b': 1}); +t.ensureIndex({'a.b': 1}); +t.ensureIndex({'a-b': 1}); t.insert({'a': {'b': 'old'}}); assert(t.findOne({'a.b': 'old'})); t.update({}, {$set: {'a': {'b': 'new'}}}); diff --git a/jstests/core/update_multi3.js b/jstests/core/update_multi3.js index c8a1fa3b11d..0077bfefead 100644 --- a/jstests/core/update_multi3.js +++ b/jstests/core/update_multi3.js @@ -6,7 +6,7 @@ function test(useIndex) { t.drop(); if (useIndex) - t.createIndex({k: 1}); + t.ensureIndex({k: 1}); for (i = 0; i < 10; i++) { t.save({_id: i, k: 'x', a: []}); diff --git a/jstests/core/update_multi4.js b/jstests/core/update_multi4.js index 38fd75358f0..d2030c5dc4b 100644 --- a/jstests/core/update_multi4.js +++ b/jstests/core/update_multi4.js @@ -7,7 +7,7 @@ for (i = 0; i < 1000; i++) { t.insert({_id: i, k: i % 12, v: "v" + i % 12}); } -t.createIndex({k: 1}); +t.ensureIndex({k: 1}); assert.eq(84, t.count({k: 2, v: "v2"}), "A0"); diff --git a/jstests/core/update_setOnInsert.js b/jstests/core/update_setOnInsert.js index 9457c69f325..430f23ce6dd 100644 --- a/jstests/core/update_setOnInsert.js +++ b/jstests/core/update_setOnInsert.js @@ -5,7 +5,7 @@ var res; function dotest(useIndex) { t.drop(); if (useIndex) { - t.createIndex({a: 1}); + t.ensureIndex({a: 1}); } t.update({_id: 5}, {$inc: {x: 2}, $setOnInsert: {a: 3}}, true); diff --git a/jstests/core/useindexonobjgtlt.js b/jstests/core/useindexonobjgtlt.js index 7b393de7c2f..4d2368f316f 100644 --- a/jstests/core/useindexonobjgtlt.js +++ b/jstests/core/useindexonobjgtlt.js @@ -3,7 +3,7 @@ t = db.factories; t.drop(); t.insert({name: "xyz", metro: {city: "New York", state: "NY"}}); -t.createIndex({metro: 1}); +t.ensureIndex({metro: 1}); assert(db.factories.find().count()); diff --git a/jstests/gle/create_index_gle.js b/jstests/gle/create_index_gle.js index 11e7186817e..8a10e5a2e9f 100644 --- a/jstests/gle/create_index_gle.js +++ b/jstests/gle/create_index_gle.js @@ -38,7 +38,7 @@ var testDB2 = secConn.getDB('test'); testDB.user.insert({x: 1}); -testDB.user.createIndex({x: 1}); +testDB.user.ensureIndex({x: 1}); assert.gleOK(testDB.runCommand({getLastError: 1, w: 2})); replTest.awaitReplication(); diff --git a/jstests/libs/geo_near_random.js b/jstests/libs/geo_near_random.js index c45cec7e813..193809cd5db 100644 --- a/jstests/libs/geo_near_random.js +++ b/jstests/libs/geo_near_random.js @@ -40,9 +40,9 @@ GeoNearRandomTest.prototype.insertPts = function(nPts, indexBounds, scale, skipI if (!skipIndex) { if (!indexBounds) - this.t.createIndex({loc: '2d'}); + this.t.ensureIndex({loc: '2d'}); else - this.t.createIndex({loc: '2d'}, indexBounds); + this.t.ensureIndex({loc: '2d'}, indexBounds); } }; diff --git a/jstests/libs/write_concern_util.js b/jstests/libs/write_concern_util.js index b1118a095c1..68f01cb9e87 100644 --- a/jstests/libs/write_concern_util.js +++ b/jstests/libs/write_concern_util.js @@ -8,7 +8,7 @@ load("jstests/libs/fail_point_util.js"); function shardCollectionWithChunks(st, coll, numDocs) { var _db = coll.getDB(); var numberDoc = numDocs || 20; - coll.createIndex({x: 1}, {unique: true}); + coll.ensureIndex({x: 1}, {unique: true}); st.ensurePrimaryShard(_db.toString(), st.shard0.shardName); st.shardColl( coll.getName(), {x: 1}, {x: numberDoc / 2}, {x: numberDoc / 2}, _db.toString(), true); diff --git a/jstests/multiVersion/libs/data_generators.js b/jstests/multiVersion/libs/data_generators.js index a46fbe8439a..4a30ca2e463 100644 --- a/jstests/multiVersion/libs/data_generators.js +++ b/jstests/multiVersion/libs/data_generators.js @@ -350,7 +350,7 @@ function DataGenerator() { // var nextIndexDocument = generator.next(); // var nextIndexSpec = nextIndexDocument["spec"]; // var nextIndexOptions = nextIndexDocument["options"]; -// db.createIndex(nextIndexSpec, nextIndexOptions); +// db.ensureIndex(nextIndexSpec, nextIndexOptions); // } // function IndexDataGenerator(options) { diff --git a/jstests/multiVersion/libs/verify_collection_data.js b/jstests/multiVersion/libs/verify_collection_data.js index ea2ef2f3f35..10b26534ccc 100644 --- a/jstests/multiVersion/libs/verify_collection_data.js +++ b/jstests/multiVersion/libs/verify_collection_data.js @@ -35,10 +35,10 @@ createCollectionWithData = function(db, collectionName, dataGenerator) { var numIndexes = 0; while (dataGenerator.indexes.hasNext()) { var nextIndex = dataGenerator.indexes.next(); - print("collection.createIndex(" + JSON.stringify(nextIndex.spec) + ", " + + print("collection.ensureIndex(" + JSON.stringify(nextIndex.spec) + ", " + JSON.stringify(nextIndex.options) + ");"); - var createIndexResult = collection.createIndex(nextIndex.spec, nextIndex.options); - assert.commandWorked(createIndexResult); + var ensureIndexResult = collection.ensureIndex(nextIndex.spec, nextIndex.options); + assert.commandWorked(ensureIndexResult); numIndexes++; } diff --git a/jstests/noPassthrough/current_op_reports_validation_io.js b/jstests/noPassthrough/current_op_reports_validation_io.js index b2b80379bce..3eecda706ee 100644 --- a/jstests/noPassthrough/current_op_reports_validation_io.js +++ b/jstests/noPassthrough/current_op_reports_validation_io.js @@ -18,7 +18,7 @@ let coll = db.getCollection(collName); coll.drop(); -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); for (let i = 0; i < 5; i++) { assert.commandWorked(coll.insert({a: i})); } diff --git a/jstests/noPassthrough/document_count_functions.js b/jstests/noPassthrough/document_count_functions.js index 1cb21f2bf18..207a6a65efa 100644 --- a/jstests/noPassthrough/document_count_functions.js +++ b/jstests/noPassthrough/document_count_functions.js @@ -39,7 +39,7 @@ assert.eq(3, coll.countDocuments({i: 1}, {limit: 3})); // that we will have 2 left. assert.eq(2, coll.countDocuments({i: 1}, {skip: 2})); -assert.commandWorked(coll.createIndex({i: 1})); +assert.commandWorked(coll.ensureIndex({i: 1})); // Aggregate stage case: Add an option that gets added as an aggregation argument. assert.eq(4, coll.countDocuments({i: 1}, {hint: {i: 1}})); diff --git a/jstests/noPassthrough/filemd5_kill_during_yield.js b/jstests/noPassthrough/filemd5_kill_during_yield.js index 3a9973cc116..c13fd9ab896 100644 --- a/jstests/noPassthrough/filemd5_kill_during_yield.js +++ b/jstests/noPassthrough/filemd5_kill_during_yield.js @@ -12,7 +12,7 @@ const db = conn.getDB("test"); db.fs.chunks.drop(); assert.commandWorked(db.fs.chunks.insert({files_id: 1, n: 0, data: new BinData(0, "64string")})); assert.commandWorked(db.fs.chunks.insert({files_id: 1, n: 1, data: new BinData(0, "test")})); -db.fs.chunks.createIndex({files_id: 1, n: 1}); +db.fs.chunks.ensureIndex({files_id: 1, n: 1}); const kFailPointName = "waitInFilemd5DuringManualYield"; assert.commandWorked(db.adminCommand({configureFailPoint: kFailPointName, mode: "alwaysOn"})); diff --git a/jstests/noPassthrough/geo_full.js b/jstests/noPassthrough/geo_full.js index e2cf2b03491..8d7fb12b73f 100644 --- a/jstests/noPassthrough/geo_full.js +++ b/jstests/noPassthrough/geo_full.js @@ -390,11 +390,11 @@ for (var test = 0; test < numTests; test++) { var indexDoc = {"locs.loc": "2d"}; randIndexAdditions(indexDoc); - // "earth" is used to drive test setup and not a valid createIndex option or required at - // this point. It must be removed before calling createIndex(). + // "earth" is used to drive test setup and not a valid createIndexes option or required at + // this point. It must be removed before calling ensureIndexes(). delete env.earth; - assert.commandWorked(t.createIndex(indexDoc, env)); + assert.commandWorked(t.ensureIndex(indexDoc, env)); assert.isnull(db.getLastError()); var padding = "x"; diff --git a/jstests/noPassthrough/geo_mnypts_plus_fields.js b/jstests/noPassthrough/geo_mnypts_plus_fields.js index f1782de5a16..467c46e3698 100644 --- a/jstests/noPassthrough/geo_mnypts_plus_fields.js +++ b/jstests/noPassthrough/geo_mnypts_plus_fields.js @@ -57,7 +57,7 @@ for (var fields = 1; fields < maxFields; fields++) { queryFields["field" + j] = field; } - coll.createIndex({loc: "2d"}); + coll.ensureIndex({loc: "2d"}); // Check that quarter of points in each quadrant for (var i = 0; i < 4; i++) { diff --git a/jstests/noPassthrough/index_partial_no_explain_cmds.js b/jstests/noPassthrough/index_partial_no_explain_cmds.js index 122ae1fade8..2ad426d9d23 100644 --- a/jstests/noPassthrough/index_partial_no_explain_cmds.js +++ b/jstests/noPassthrough/index_partial_no_explain_cmds.js @@ -11,7 +11,7 @@ var ret; coll.drop(); db.getCollection("mrOutput").drop(); -assert.commandWorked(coll.createIndex({x: 1}, {partialFilterExpression: {a: 1}})); +assert.commandWorked(coll.ensureIndex({x: 1}, {partialFilterExpression: {a: 1}})); assert.commandWorked(coll.insert({_id: 1, x: 5, a: 2})); // Not in index. assert.commandWorked(coll.insert({_id: 2, x: 6, a: 1})); // In index. diff --git a/jstests/noPassthrough/indexbg1.js b/jstests/noPassthrough/indexbg1.js index 24b93699399..c2bdf180be3 100644 --- a/jstests/noPassthrough/indexbg1.js +++ b/jstests/noPassthrough/indexbg1.js @@ -56,7 +56,7 @@ while (1) { // if indexing finishes before we can run checks, try indexing w/ m assert.commandWorked(bulk.execute()); assert.eq(size, t.count()); - bgIndexBuildPid = doParallel(fullName + ".createIndex( {i:1}, {background:true} )"); + bgIndexBuildPid = doParallel(fullName + ".ensureIndex( {i:1}, {background:true} )"); try { // wait for indexing to start print("wait for indexing to start"); diff --git a/jstests/noPassthrough/indexbg2.js b/jstests/noPassthrough/indexbg2.js index 947c8156493..e4e30f69813 100644 --- a/jstests/noPassthrough/indexbg2.js +++ b/jstests/noPassthrough/indexbg2.js @@ -30,7 +30,7 @@ let doParallel = function(work) { let indexBuild = function() { let fullName = "db." + baseName; - return doParallel(fullName + ".createIndex( {i:1}, {background:true, unique:true} )"); + return doParallel(fullName + ".ensureIndex( {i:1}, {background:true, unique:true} )"); }; let doneParallel = function() { diff --git a/jstests/noPassthrough/indexbg_drop.js b/jstests/noPassthrough/indexbg_drop.js index 8b290849965..c7ef4245fc5 100644 --- a/jstests/noPassthrough/indexbg_drop.js +++ b/jstests/noPassthrough/indexbg_drop.js @@ -52,8 +52,8 @@ assert.commandWorked( jsTest.log("Starting background indexing for test of: " + tojson(dc)); // Add another index to be sure the drop command works. -primaryDB.getCollection(collection).createIndex({b: 1}); -primaryDB.getCollection(collection).createIndex({i: 1}, {background: true}); +primaryDB.getCollection(collection).ensureIndex({b: 1}); +primaryDB.getCollection(collection).ensureIndex({i: 1}, {background: true}); // Make sure the index build has started on the secondary. IndexBuildTest.waitForIndexBuildToStart(secondDB); diff --git a/jstests/noPassthrough/libs/backup_restore.js b/jstests/noPassthrough/libs/backup_restore.js index 5bc83d693d5..b882d2d0439 100644 --- a/jstests/noPassthrough/libs/backup_restore.js +++ b/jstests/noPassthrough/libs/backup_restore.js @@ -50,7 +50,7 @@ var BackupRestoreTest = function(options) { let iteration = 0; var coll = db.getSiblingDB(dbName).getCollection(collectionName); - coll.createIndex({x: 1}); + coll.ensureIndex({x: 1}); var largeValue = new Array(1024).join('L'); diff --git a/jstests/noPassthrough/lookup_with_limit_sharded.js b/jstests/noPassthrough/lookup_with_limit_sharded.js index ef379ec073e..e6ee126a03f 100644 --- a/jstests/noPassthrough/lookup_with_limit_sharded.js +++ b/jstests/noPassthrough/lookup_with_limit_sharded.js @@ -98,7 +98,7 @@ const explain = coll.explain().aggregate(topKSortPipeline); assert.eq(explain.stages[0].$cursor.queryPlanner.winningPlan.limitAmount, 5, explain); // Tests on a sharded collection. -coll.createIndex({x: 1}); +coll.ensureIndex({x: 1}); st.shardColl(coll, {x: 1}, {x: 1}, {x: 1}, db, true); checkShardedResults(lookupPipeline, 2); diff --git a/jstests/noPassthrough/ttl_capped.js b/jstests/noPassthrough/ttl_capped.js index f22329d8ca3..662e5781e03 100644 --- a/jstests/noPassthrough/ttl_capped.js +++ b/jstests/noPassthrough/ttl_capped.js @@ -38,7 +38,7 @@ for (var i = 0; i < numCollectionsToCreate; i++) { } // Create a TTL index on the 'date' field of the collection. - var res = testDB[collName].createIndex({date: 1}, {expireAfterSeconds: expireAfterSeconds}); + var res = testDB[collName].ensureIndex({date: 1}, {expireAfterSeconds: expireAfterSeconds}); assert.commandWorked(res); // Insert a single document with a 'date' field that is already expired according to the diff --git a/jstests/noPassthrough/ttl_hidden_index.js b/jstests/noPassthrough/ttl_hidden_index.js index b64f4822638..80c783dad33 100644 --- a/jstests/noPassthrough/ttl_hidden_index.js +++ b/jstests/noPassthrough/ttl_hidden_index.js @@ -6,7 +6,7 @@ let coll = runner.getDB("test").ttl_hiddenl_index; coll.drop(); // Create TTL index. -assert.commandWorked(coll.createIndex({x: 1}, {expireAfterSeconds: 0})); +assert.commandWorked(coll.ensureIndex({x: 1}, {expireAfterSeconds: 0})); let now = new Date(); assert.commandWorked(coll.hideIndex("x_1")); diff --git a/jstests/noPassthrough/ttl_monitor_does_not_unregister_index_during_collection_creation.js b/jstests/noPassthrough/ttl_monitor_does_not_unregister_index_during_collection_creation.js index 9758aec62b3..c96b2f8d642 100644 --- a/jstests/noPassthrough/ttl_monitor_does_not_unregister_index_during_collection_creation.js +++ b/jstests/noPassthrough/ttl_monitor_does_not_unregister_index_during_collection_creation.js @@ -25,10 +25,10 @@ const failPoint = "hangTTLCollectionCacheAfterRegisteringInfo"; assert.commandWorked(db.adminCommand({configureFailPoint: failPoint, mode: "alwaysOn"})); // Create an index on a non-existent collection. This will implicitly create the collection. -let awaitcreateIndex = startParallelShell(() => { +let awaitEnsureIndex = startParallelShell(() => { const testDB = db.getSiblingDB(TestData.dbName); assert.commandWorked( - testDB.getCollection(TestData.collName).createIndex({x: 1}, {expireAfterSeconds: 0})); + testDB.getCollection(TestData.collName).ensureIndex({x: 1}, {expireAfterSeconds: 0})); }, db.getMongo().port); // Wait for the TTL monitor to run and register the index in the TTL collection cache. @@ -43,7 +43,7 @@ assert.soon(function() { // Finish the index build. assert.commandWorked(db.adminCommand({configureFailPoint: failPoint, mode: "off"})); -awaitcreateIndex(); +awaitEnsureIndex(); // Insert documents, which should expire immediately and be removed on the next TTL pass. const now = new Date(); diff --git a/jstests/noPassthrough/ttl_partial_index.js b/jstests/noPassthrough/ttl_partial_index.js index 977eb4aef4c..61cc5e6aff1 100644 --- a/jstests/noPassthrough/ttl_partial_index.js +++ b/jstests/noPassthrough/ttl_partial_index.js @@ -8,7 +8,7 @@ var coll = runner.getDB("test").ttl_partial_index; coll.drop(); // Create TTL partial index. -assert.commandWorked(coll.createIndex( +assert.commandWorked(coll.ensureIndex( {x: 1}, {expireAfterSeconds: 0, partialFilterExpression: {z: {$exists: true}}})); var now = new Date(); diff --git a/jstests/noPassthrough/ttl_resharding_collection.js b/jstests/noPassthrough/ttl_resharding_collection.js index 648d1a9b056..715c2801331 100644 --- a/jstests/noPassthrough/ttl_resharding_collection.js +++ b/jstests/noPassthrough/ttl_resharding_collection.js @@ -7,7 +7,7 @@ const collName = "system.resharding.mycoll"; const coll = runner.getDB(jsTestName())[collName]; coll.drop(); -assert.commandWorked(coll.createIndex({x: 1}, {expireAfterSeconds: 0})); +assert.commandWorked(coll.ensureIndex({x: 1}, {expireAfterSeconds: 0})); const now = new Date(); assert.commandWorked(coll.insert({x: now})); diff --git a/jstests/noPassthrough/update_server-5552.js b/jstests/noPassthrough/update_server-5552.js index 4af4491b999..876f9688c6f 100644 --- a/jstests/noPassthrough/update_server-5552.js +++ b/jstests/noPassthrough/update_server-5552.js @@ -17,7 +17,7 @@ for (let i = 0; i < N; i++) { assert.commandWorked(bulk.execute()); const join = startParallelShell( - "while( db.foo.findOne( { _id : 0 } ).x == 1 ); db.foo.createIndex( { x : 1 } );"); + "while( db.foo.findOne( { _id : 0 } ).x == 1 ); db.foo.ensureIndex( { x : 1 } );"); t.update({ $where: function() { diff --git a/jstests/noPassthroughWithMongod/apply_ops_errors.js b/jstests/noPassthroughWithMongod/apply_ops_errors.js index 2e2fb2d6069..0cf4a789718 100644 --- a/jstests/noPassthroughWithMongod/apply_ops_errors.js +++ b/jstests/noPassthroughWithMongod/apply_ops_errors.js @@ -19,7 +19,7 @@ coll.drop(); // Scenario 1: only one operation assert.eq(0, coll.find().count(), "test collection not empty"); -coll.createIndex({x: 1}, {unique: true}); +coll.ensureIndex({x: 1}, {unique: true}); coll.insert({_id: 1, x: "init"}); var res = db.runCommand({ @@ -38,7 +38,7 @@ coll.drop(); // Scenario 2: Three operations, first two should run, second should fail. assert.eq(0, coll.find().count(), "test collection not empty"); -coll.createIndex({x: 1}, {unique: true}); +coll.ensureIndex({x: 1}, {unique: true}); coll.insert({_id: 1, x: "init"}); var res = db.runCommand({ diff --git a/jstests/noPassthroughWithMongod/background.js b/jstests/noPassthroughWithMongod/background.js index a6fe673a376..ef591fa5114 100644 --- a/jstests/noPassthroughWithMongod/background.js +++ b/jstests/noPassthroughWithMongod/background.js @@ -18,7 +18,7 @@ for (var i = 0; i < 100000; i++) { } // start bg indexing -a.bg1.createIndex({i: 1}, {name: "i_1", background: true}); +a.bg1.ensureIndex({i: 1}, {name: "i_1", background: true}); // add more data bulk = t.initializeUnorderedBulkOp(); diff --git a/jstests/noPassthroughWithMongod/bulk_api_limits.js b/jstests/noPassthroughWithMongod/bulk_api_limits.js index 91b56f80951..3dada22c519 100644 --- a/jstests/noPassthroughWithMongod/bulk_api_limits.js +++ b/jstests/noPassthroughWithMongod/bulk_api_limits.js @@ -17,7 +17,7 @@ var executeTestsUnordered = function() { // Create unique index coll.dropIndexes(); coll.remove({}); - coll.createIndex({a: 1}, {unique: true}); + coll.ensureIndex({a: 1}, {unique: true}); /** * Fail during batch construction due to single document > maxBSONSize diff --git a/jstests/noPassthroughWithMongod/capped4.js b/jstests/noPassthroughWithMongod/capped4.js index c659ff65935..bfa92cef26d 100644 --- a/jstests/noPassthroughWithMongod/capped4.js +++ b/jstests/noPassthroughWithMongod/capped4.js @@ -3,7 +3,7 @@ t = db.jstests_capped4; t.drop(); db.createCollection("jstests_capped4", {size: 1000, capped: true}); -t.createIndex({i: 1}); +t.ensureIndex({i: 1}); for (i = 0; i < 20; ++i) { t.save({i: i}); } diff --git a/jstests/noPassthroughWithMongod/dup_bgindex.js b/jstests/noPassthroughWithMongod/dup_bgindex.js index dd62117cf9f..02ac4bf7870 100644 --- a/jstests/noPassthroughWithMongod/dup_bgindex.js +++ b/jstests/noPassthroughWithMongod/dup_bgindex.js @@ -7,10 +7,10 @@ for (var i = 0; i < 10000; i++) { docs.push({name: "foo", z: {a: 17, b: 4}, i: i}); } assert.commandWorked(t.insert(docs)); -var cmd = "assert.commandWorked(db.duplIndexTest.createIndex( { i : 1 }, {background:true} ));"; +var cmd = "assert.commandWorked(db.duplIndexTest.ensureIndex( { i : 1 }, {background:true} ));"; var join1 = startParallelShell(cmd); var join2 = startParallelShell(cmd); -assert.commandWorked(t.createIndex({i: 1}, {background: true})); +assert.commandWorked(t.ensureIndex({i: 1}, {background: true})); assert.eq(1, t.find({i: 1}).count(), "Should find only one doc"); assert.commandWorked(t.dropIndex({i: 1})); assert.eq(1, t.find({i: 1}).count(), "Should find only one doc"); diff --git a/jstests/noPassthroughWithMongod/explain1.js b/jstests/noPassthroughWithMongod/explain1.js index 1156a5b86ed..7b37ade1ece 100644 --- a/jstests/noPassthroughWithMongod/explain1.js +++ b/jstests/noPassthroughWithMongod/explain1.js @@ -8,7 +8,7 @@ s1 = startParallelShell(function() { t = db.jstests_slowNightly_explain1; for (var i = 0; i < 80; ++i) { t.drop(); - t.createIndex({x: 1}); + t.ensureIndex({x: 1}); for (var j = 0; j < 1000; ++j) { t.save({x: j, y: 1}); } diff --git a/jstests/noPassthroughWithMongod/explain2.js b/jstests/noPassthroughWithMongod/explain2.js index 0720091e4a4..3766c3a0e93 100644 --- a/jstests/noPassthroughWithMongod/explain2.js +++ b/jstests/noPassthroughWithMongod/explain2.js @@ -8,7 +8,7 @@ t.drop(); db.createCollection(collName, {capped: true, size: 100000}); t = db[collName]; -t.createIndex({x: 1}); +t.ensureIndex({x: 1}); a = startParallelShell('for( i = 0; i < 50000; ++i ) { db.' + collName + '.insert( {x:i,y:1} ); }'); diff --git a/jstests/noPassthroughWithMongod/explain3.js b/jstests/noPassthroughWithMongod/explain3.js index 6d35949d273..d402b610d96 100644 --- a/jstests/noPassthroughWithMongod/explain3.js +++ b/jstests/noPassthroughWithMongod/explain3.js @@ -8,7 +8,7 @@ s1 = startParallelShell(function() { t = db.jstests_slowNightly_explain3; for (var i = 0; i < 80; ++i) { t.drop(); - t.createIndex({x: 1}); + t.ensureIndex({x: 1}); for (var j = 0; j < 1000; ++j) { t.save({x: j, y: 1}); } diff --git a/jstests/noPassthroughWithMongod/external_sort_text_agg.js b/jstests/noPassthroughWithMongod/external_sort_text_agg.js index 583aff8601b..089432b88d0 100644 --- a/jstests/noPassthroughWithMongod/external_sort_text_agg.js +++ b/jstests/noPassthroughWithMongod/external_sort_text_agg.js @@ -1,7 +1,7 @@ // Ensure text search metadata is not lost in an external sort var t = db.external_sort_text_agg; t.drop(); -t.createIndex({text: "text"}); +t.ensureIndex({text: "text"}); for (i = 0; i < 100; i++) { t.insert({_id: i, text: Array(210000).join("asdf ")}); // string over 1MB to hit the 100MB threshold for external sort diff --git a/jstests/noPassthroughWithMongod/geo_axis_aligned.js b/jstests/noPassthroughWithMongod/geo_axis_aligned.js index 877954b0f2a..0849b6b7acc 100644 --- a/jstests/noPassthroughWithMongod/geo_axis_aligned.js +++ b/jstests/noPassthroughWithMongod/geo_axis_aligned.js @@ -62,9 +62,9 @@ for (var b = 0; b < bits.length; b++) { {"_id": 9, "loc": {"x": center[j][0] + radius[i], "y": center[j][1] - radius[i]}}); var res = - t.createIndex({loc: "2d"}, {max: bound[j][1], min: bound[j][0], bits: bits[b]}); + t.ensureIndex({loc: "2d"}, {max: bound[j][1], min: bound[j][0], bits: bits[b]}); - // createIndex fails when this iteration inserted coordinates that are out of bounds. + // ensureIndex fails when this iteration inserted coordinates that are out of bounds. // These are invalid cases, so we skip them. if (!res.ok) continue; diff --git a/jstests/noPassthroughWithMongod/geo_mnypts.js b/jstests/noPassthroughWithMongod/geo_mnypts.js index 7566c479588..d3ae714b69b 100644 --- a/jstests/noPassthroughWithMongod/geo_mnypts.js +++ b/jstests/noPassthroughWithMongod/geo_mnypts.js @@ -13,7 +13,7 @@ for (var i = 0; i < totalPts; i++) { } assert.commandWorked(bulk.execute()); -coll.createIndex({loc: "2d"}); +coll.ensureIndex({loc: "2d"}); // Check that quarter of points in each quadrant for (var i = 0; i < 4; i++) { diff --git a/jstests/noPassthroughWithMongod/geo_polygon.js b/jstests/noPassthroughWithMongod/geo_polygon.js index 28110591d64..d0085fa1f92 100644 --- a/jstests/noPassthroughWithMongod/geo_polygon.js +++ b/jstests/noPassthroughWithMongod/geo_polygon.js @@ -20,7 +20,7 @@ var numTests = 31; var start = (TestData.undoRecorderPath ? 20 : 0); for (var n = start; n < numTests; n++) { t.dropIndexes(); - t.createIndex({loc: "2d"}, {bits: 2 + n}); + t.ensureIndex({loc: "2d"}, {bits: 2 + n}); assert.between(9 - 2, t.find({loc: {"$within": {"$polygon": [[0, 0], [1, 1], [0, 2]]}}}).count(), diff --git a/jstests/noPassthroughWithMongod/huge_multikey_index.js b/jstests/noPassthroughWithMongod/huge_multikey_index.js index 195a85e9b5f..9c19c0d00a1 100644 --- a/jstests/noPassthroughWithMongod/huge_multikey_index.js +++ b/jstests/noPassthroughWithMongod/huge_multikey_index.js @@ -13,9 +13,9 @@ function doit() { t.insert({a: arr}); - // t.createIndex({a:1}, {background:true}) // always worked + // t.ensureIndex({a:1}, {background:true}) // always worked - t.createIndex({a: 1}); // used to fail server with out of fds error + t.ensureIndex({a: 1}); // used to fail server with out of fds error } doit(); diff --git a/jstests/noPassthroughWithMongod/index_check10.js b/jstests/noPassthroughWithMongod/index_check10.js index f355ace6bb8..e0786a4e539 100644 --- a/jstests/noPassthroughWithMongod/index_check10.js +++ b/jstests/noPassthroughWithMongod/index_check10.js @@ -108,7 +108,7 @@ function doIt() { } assert.commandWorked(bulk.execute()); - t.createIndex(idx); + t.ensureIndex(idx); check(); bulk = t.initializeUnorderedBulkOp(); diff --git a/jstests/noPassthroughWithMongod/index_check9.js b/jstests/noPassthroughWithMongod/index_check9.js index 3e082cb1a3f..8a693604bb8 100644 --- a/jstests/noPassthroughWithMongod/index_check9.js +++ b/jstests/noPassthroughWithMongod/index_check9.js @@ -25,7 +25,7 @@ function doIt() { alphas.push(Random.rand() > 0.5); } - t.createIndex(idx); + t.ensureIndex(idx); function obj() { var ret = {}; diff --git a/jstests/noPassthroughWithMongod/indexbg_interrupts.js b/jstests/noPassthroughWithMongod/indexbg_interrupts.js index b468596bd14..19055c16cf5 100644 --- a/jstests/noPassthroughWithMongod/indexbg_interrupts.js +++ b/jstests/noPassthroughWithMongod/indexbg_interrupts.js @@ -78,7 +78,7 @@ for (var idx = 0; idx < dropAction.length; idx++) { assert.commandWorked(bulk.execute()); jsTest.log("Starting background indexing for test of: " + JSON.stringify(dc)); - primaryDB.getCollection(collection).createIndex({i: 1}, {background: true}); + primaryDB.getCollection(collection).ensureIndex({i: 1}, {background: true}); assert.eq(2, primaryDB.getCollection(collection).getIndexes().length); // Wait for the secondary to get the index entry diff --git a/jstests/noPassthroughWithMongod/recstore.js b/jstests/noPassthroughWithMongod/recstore.js index cae767b0637..fdb41af568b 100644 --- a/jstests/noPassthroughWithMongod/recstore.js +++ b/jstests/noPassthroughWithMongod/recstore.js @@ -10,13 +10,13 @@ t.drop(); t.save({z: 3}); t.save({z: 2}); -t.createIndex({z: 1}); -t.createIndex({q: 1}); +t.ensureIndex({z: 1}); +t.ensureIndex({q: 1}); assert(t.find().sort({z: 1})[0].z == 2); t.dropIndexes(); assert(t.find().sort({z: 1})[0].z == 2); -t.createIndex({z: 1}); -t.createIndex({q: 1}); +t.ensureIndex({z: 1}); +t.ensureIndex({q: 1}); diff --git a/jstests/noPassthroughWithMongod/renameWithWCE.js b/jstests/noPassthroughWithMongod/renameWithWCE.js index db932e4621a..0c232ec0b37 100644 --- a/jstests/noPassthroughWithMongod/renameWithWCE.js +++ b/jstests/noPassthroughWithMongod/renameWithWCE.js @@ -23,8 +23,8 @@ b.drop(); a.save({a: 1}); a.save({a: 2}); a.save({a: 3}); -a.createIndex({a: 1}); -a.createIndex({b: 1}); +a.ensureIndex({a: 1}); +a.ensureIndex({b: 1}); assert.commandWorked(admin.runCommand({renameCollection: "db_a.rename7", to: "db_b.rename7"})); diff --git a/jstests/noPassthroughWithMongod/temp_namespace.js b/jstests/noPassthroughWithMongod/temp_namespace.js index 1f4438d5b96..257874d5966 100644 --- a/jstests/noPassthroughWithMongod/temp_namespace.js +++ b/jstests/noPassthroughWithMongod/temp_namespace.js @@ -10,10 +10,10 @@ d = conn.getDB('test'); assert.commandWorked(d.runCommand({ applyOps: [{op: "c", ns: d.getName() + ".$cmd", o: {create: testname + 'temp1', temp: true}}] })); -d[testname + 'temp1'].createIndex({x: 1}); +d[testname + 'temp1'].ensureIndex({x: 1}); assert.commandWorked(d.runCommand( {applyOps: [{op: "c", ns: d.getName() + ".$cmd", o: {create: testname + 'temp2', temp: 1}}]})); -d[testname + 'temp2'].createIndex({x: 1}); +d[testname + 'temp2'].ensureIndex({x: 1}); assert.commandWorked(d.runCommand({ applyOps: [{op: "c", ns: d.getName() + ".$cmd", o: {create: testname + 'keep1', temp: false}}] })); diff --git a/jstests/noPassthroughWithMongod/ttl1.js b/jstests/noPassthroughWithMongod/ttl1.js index 94738104d73..2c1b0d65cbf 100644 --- a/jstests/noPassthroughWithMongod/ttl1.js +++ b/jstests/noPassthroughWithMongod/ttl1.js @@ -33,7 +33,7 @@ sleep(70 * 1000); assert.eq(t.count(), 30); // Part 2 -t.createIndex({x: 1}, {expireAfterSeconds: 20000}); +t.ensureIndex({x: 1}, {expireAfterSeconds: 20000}); assert.soon(function() { return t.count() < 30; @@ -49,7 +49,7 @@ assert.lte(18, db.serverStatus().metrics.ttl.deletedDocuments); assert.lte(1, db.serverStatus().metrics.ttl.passes); // Part 3 -t.createIndex({y: 1}, {expireAfterSeconds: 10000}); +t.ensureIndex({y: 1}, {expireAfterSeconds: 10000}); assert.soon(function() { return t.count() < 12; diff --git a/jstests/noPassthroughWithMongod/ttl_repl.js b/jstests/noPassthroughWithMongod/ttl_repl.js index 14061ede6d1..ff15887b93b 100644 --- a/jstests/noPassthroughWithMongod/ttl_repl.js +++ b/jstests/noPassthroughWithMongod/ttl_repl.js @@ -50,7 +50,7 @@ printjson(secondary1col.stats()); // the correct number of docs age out var initialExpireAfterSeconds = 20000; assert.commandWorked( - primarycol.createIndex({x: 1}, {expireAfterSeconds: initialExpireAfterSeconds})); + primarycol.ensureIndex({x: 1}, {expireAfterSeconds: initialExpireAfterSeconds})); rt.awaitReplication(); sleep(70 * 1000); // TTL monitor runs every 60 seconds, so wait 70 diff --git a/jstests/noPassthroughWithMongod/ttl_repl_maintenance.js b/jstests/noPassthroughWithMongod/ttl_repl_maintenance.js index 23bb9367452..0cdec8e1845 100644 --- a/jstests/noPassthroughWithMongod/ttl_repl_maintenance.js +++ b/jstests/noPassthroughWithMongod/ttl_repl_maintenance.js @@ -16,7 +16,7 @@ var primeSystemReplset = function() { print("create a TTL collection"); var testDB = conn.getDB("test"); - assert.commandWorked(testDB.foo.createIndex({x: 1}, {expireAfterSeconds: 2})); + assert.commandWorked(testDB.foo.ensureIndex({x: 1}, {expireAfterSeconds: 2})); }; var restartWithConfig = function() { diff --git a/jstests/noPassthroughWithMongod/ttl_repl_secondary_disabled.js b/jstests/noPassthroughWithMongod/ttl_repl_secondary_disabled.js index 160933c4ed8..84718bfb914 100644 --- a/jstests/noPassthroughWithMongod/ttl_repl_secondary_disabled.js +++ b/jstests/noPassthroughWithMongod/ttl_repl_secondary_disabled.js @@ -33,7 +33,7 @@ let primarycol = primarydb['c']; let secondary1col = secondary1db['c']; // create TTL index, wait for TTL monitor to kick in, then check things -primarycol.createIndex({x: 1}, {expireAfterSeconds: 10}); +primarycol.ensureIndex({x: 1}, {expireAfterSeconds: 10}); rt.awaitReplication(); diff --git a/jstests/noPassthroughWithMongod/ttl_sharded.js b/jstests/noPassthroughWithMongod/ttl_sharded.js index 61a97a8ce00..8ab74f35be9 100644 --- a/jstests/noPassthroughWithMongod/ttl_sharded.js +++ b/jstests/noPassthroughWithMongod/ttl_sharded.js @@ -32,7 +32,7 @@ assert.commandWorked(bulk.execute()); assert.eq(t.count(), 24, "initial docs not inserted"); // create the TTL index which delete anything older than ~5.5 hours -t.createIndex({x: 1}, {expireAfterSeconds: 20000}); +t.ensureIndex({x: 1}, {expireAfterSeconds: 20000}); // split chunk in half by _id, and move one chunk to the other shard s.adminCommand({split: ns, middle: {_id: 12}}); diff --git a/jstests/noPassthroughWithMongod/validate_command.js b/jstests/noPassthroughWithMongod/validate_command.js index 3ef6a1d79e4..5db827f0e2a 100644 --- a/jstests/noPassthroughWithMongod/validate_command.js +++ b/jstests/noPassthroughWithMongod/validate_command.js @@ -27,8 +27,8 @@ for (var i = 0; i < count; i++) { t.insert({x: i}); } -t.createIndex({x: 1}, {name: "forward"}); -t.createIndex({x: -1}, {name: "reverse"}); +t.ensureIndex({x: 1}, {name: "forward"}); +t.ensureIndex({x: -1}, {name: "reverse"}); // TEST NORMAL VALIDATE var output = t.validate(); diff --git a/jstests/parallel/insert.js b/jstests/parallel/insert.js index d28eb89e220..e2dee8053d9 100644 --- a/jstests/parallel/insert.js +++ b/jstests/parallel/insert.js @@ -3,7 +3,7 @@ load('jstests/libs/parallelTester.js'); f = db.jstests_parallel_insert; f.drop(); -f.createIndex({who: 1}); +f.ensureIndex({who: 1}); Random.setRandomSeed(); diff --git a/jstests/parallel/manyclients.js b/jstests/parallel/manyclients.js index fc6dce056a8..ca31f333635 100644 --- a/jstests/parallel/manyclients.js +++ b/jstests/parallel/manyclients.js @@ -3,7 +3,7 @@ load('jstests/libs/parallelTester.js'); f = db.jstests_parallel_manyclients; f.drop(); -f.createIndex({who: 1}); +f.ensureIndex({who: 1}); Random.setRandomSeed(); diff --git a/jstests/parallel/update_serializability1.js b/jstests/parallel/update_serializability1.js index e57b51ae721..6fc41204c3c 100644 --- a/jstests/parallel/update_serializability1.js +++ b/jstests/parallel/update_serializability1.js @@ -10,8 +10,8 @@ for (var i = 0; i < N; i++) { } bulk.execute(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); s1 = startParallelShell("db.update_serializability1.update( { a : { $gte : 0 } }, { $set : { b : " + (N + 1) + ", x : 2 } }, false, true );"); diff --git a/jstests/parallel/update_serializability2.js b/jstests/parallel/update_serializability2.js index 16fd4ad3394..84b27049e53 100644 --- a/jstests/parallel/update_serializability2.js +++ b/jstests/parallel/update_serializability2.js @@ -11,8 +11,8 @@ for (var i = 0; i < N; i++) { } bulk.execute(); -t.createIndex({a: 1}); -t.createIndex({b: 1}); +t.ensureIndex({a: 1}); +t.ensureIndex({b: 1}); var s1 = startParallelShell( "db.update_serializability1.update( { a : { $gte : 0 } }, { $set : { x : 2 } }, false, true );"); diff --git a/jstests/perf/compact_speed_test.js b/jstests/perf/compact_speed_test.js index 5f1566a5967..b8fbfd2dc4a 100644 --- a/jstests/perf/compact_speed_test.js +++ b/jstests/perf/compact_speed_test.js @@ -29,11 +29,11 @@ if (1) { var a = timed(); // print("index"); - t.createIndex({x: 1}); + t.ensureIndex({x: 1}); // print("index"); - t.createIndex({y: 1}); + t.ensureIndex({y: 1}); // print("index"); - t.createIndex({z: 1}); + t.ensureIndex({z: 1}); a += timed(); diff --git a/jstests/perf/find1.js b/jstests/perf/find1.js index 31710cbfd66..6a9d3b75355 100644 --- a/jstests/perf/find1.js +++ b/jstests/perf/find1.js @@ -13,7 +13,7 @@ function testSetup(dbConn) { for (var i = 0; i < size; i++) { t.save({num: i}); if (i == 0) - t.createIndex({num: 1}); + t.ensureIndex({num: 1}); } } diff --git a/jstests/perf/index1.js b/jstests/perf/index1.js index 04b71680e66..ecb749069b9 100644 --- a/jstests/perf/index1.js +++ b/jstests/perf/index1.js @@ -12,11 +12,11 @@ printjson(db.serverStatus().mem); for (var i = 0; i < 5; i++) { nonu = Date.timeFunc(function() { - t.createIndex({x: 1}); + t.ensureIndex({x: 1}); }); t.dropIndex({x: 1}); u = Date.timeFunc(function() { - t.createIndex({x: 1}, {unique: 1}); + t.ensureIndex({x: 1}, {unique: 1}); }); t.dropIndex({x: 1}); print("non unique: " + nonu + " unique: " + u); diff --git a/jstests/perf/remove1.js b/jstests/perf/remove1.js index a7bf7bc1faa..09f1948572b 100644 --- a/jstests/perf/remove1.js +++ b/jstests/perf/remove1.js @@ -10,7 +10,7 @@ var msg = "Hello from remove test"; function testSetup(dbConn) { var t = dbConn[collection_name]; t.drop(); - t.createIndex({num: 1}); + t.ensureIndex({num: 1}); for (var i = 0; i < size; i++) { t.save({num: i, msg: msg}); diff --git a/jstests/replsets/apply_ops_create_indexes.js b/jstests/replsets/apply_ops_create_indexes.js index e3641965ce6..ebeffbb1593 100644 --- a/jstests/replsets/apply_ops_create_indexes.js +++ b/jstests/replsets/apply_ops_create_indexes.js @@ -7,6 +7,54 @@ load('jstests/noPassthrough/libs/index_build.js'); +let ensureIndexExists = function(testDB, collName, indexName, expectedNumIndexes) { + let cmd = {listIndexes: collName}; + let res = testDB.runCommand(cmd); + assert.commandWorked(res, "could not run " + tojson(cmd)); + let indexes = new DBCommandCursor(testDB, res).toArray(); + + assert.eq(indexes.length, expectedNumIndexes); + + let foundIndex = false; + for (let i = 0; i < indexes.length; ++i) { + if (indexes[i].name == indexName) { + foundIndex = true; + } + } + assert(foundIndex, + "did not find the index '" + indexName + + "' amongst the collection indexes: " + tojson(indexes)); +}; + +let ensureOplogEntryExists = function(localDB, indexName) { + // Make sure the oplog entry for index creation exists in the oplog. + let cmd = {find: "oplog.rs"}; + let res = localDB.runCommand(cmd); + assert.commandWorked(res, "could not run " + tojson(cmd)); + let cursor = new DBCommandCursor(localDB, res); + let errMsg = "expected more data from command " + tojson(cmd) + ", with result " + tojson(res); + assert(cursor.hasNext(), errMsg); + let oplog = localDB.getCollection("oplog.rs"); + + // If two phase index builds are enabled, index creation will show up in the oplog as a pair of + // startIndexBuild and commitIndexBuild oplog entries rather than a single createIndexes entry. + let query = { + $and: [ + {"o.startIndexBuild": {$exists: true}}, + {"o.indexes.0.name": indexName}, + ], + }; + let resCursor = oplog.find(query); + assert.eq(resCursor.count(), + 1, + "Expected the query " + tojson(query) + " to return exactly 1 document"); + query = {$and: [{"o.commitIndexBuild": {$exists: true}}, {"o.indexes.0.name": indexName}]}; + resCursor = oplog.find(query); + assert.eq(resCursor.count(), + 1, + "Expected the query " + tojson(query) + " to return exactly 1 document"); +}; + let rst = new ReplSetTest({nodes: 3}); rst.startSet(); rst.initiate(); diff --git a/jstests/replsets/background_index.js b/jstests/replsets/background_index.js index a09138a9e19..662abef771d 100644 --- a/jstests/replsets/background_index.js +++ b/jstests/replsets/background_index.js @@ -23,7 +23,7 @@ for (var i = 0; i < 100; i++) { } // Add a background index. -coll.createIndex({x: 1}, {background: true}); +coll.ensureIndex({x: 1}, {background: true}); // Rename the collection. assert.commandWorked( diff --git a/jstests/replsets/buildindexes.js b/jstests/replsets/buildindexes.js index 95356d24e1b..3be0ba68896 100644 --- a/jstests/replsets/buildindexes.js +++ b/jstests/replsets/buildindexes.js @@ -26,7 +26,7 @@ for (var i in secondaryConns) { } replTest.awaitReplication(); -primary.x.createIndex({y: 1}); +primary.x.ensureIndex({y: 1}); for (i = 0; i < 100; i++) { primary.x.insert({x: 1, y: "abc", c: 1}); diff --git a/jstests/replsets/bulk_api_wc.js b/jstests/replsets/bulk_api_wc.js index 1c90537d2be..591ad1aef58 100644 --- a/jstests/replsets/bulk_api_wc.js +++ b/jstests/replsets/bulk_api_wc.js @@ -28,7 +28,7 @@ var executeTests = function() { // Create a unique index, legacy writes validate too early to use invalid documents for // write // error testing - coll.createIndex({a: 1}, {unique: true}); + coll.ensureIndex({a: 1}, {unique: true}); // // Ordered diff --git a/jstests/replsets/drop_collections_two_phase_rename_drop_target.js b/jstests/replsets/drop_collections_two_phase_rename_drop_target.js index 9aa9a15c9c1..5191fb47127 100644 --- a/jstests/replsets/drop_collections_two_phase_rename_drop_target.js +++ b/jstests/replsets/drop_collections_two_phase_rename_drop_target.js @@ -52,8 +52,8 @@ let shortIndexName = "short_name"; // In the target collection, which will be dropped, create one index with a "too long" name, and // one with a name of acceptable size. -assert.commandWorked(toColl.createIndex({a: 1}, {name: longIndexName})); -assert.commandWorked(toColl.createIndex({b: 1}, {name: shortIndexName})); +assert.commandWorked(toColl.ensureIndex({a: 1}, {name: longIndexName})); +assert.commandWorked(toColl.ensureIndex({b: 1}, {name: shortIndexName})); // Insert documents into both collections so that we can tell them apart. assert.commandWorked(fromColl.insert({_id: 'from'})); diff --git a/jstests/replsets/initial_sync4.js b/jstests/replsets/initial_sync4.js index 1860db6d1c8..35dbd632715 100644 --- a/jstests/replsets/initial_sync4.js +++ b/jstests/replsets/initial_sync4.js @@ -17,7 +17,7 @@ jsTestLog("2. Insert some data"); var N = 5000; - mc.createIndex({x: 1}); + mc.ensureIndex({x: 1}); var bulk = mc.initializeUnorderedBulkOp(); for (var i = 0; i < N; ++i) { bulk.insert({_id: i, x: i, a: {}}); diff --git a/jstests/replsets/initial_sync_ambiguous_index.js b/jstests/replsets/initial_sync_ambiguous_index.js index 2398243f301..c50324db935 100644 --- a/jstests/replsets/initial_sync_ambiguous_index.js +++ b/jstests/replsets/initial_sync_ambiguous_index.js @@ -32,7 +32,7 @@ rst.initiate(); const primaryColl = rst.getPrimary().getDB(dbName).getCollection(collectionName); // Create the index. -primaryColl.createIndex({"a.0": 1}); +primaryColl.ensureIndex({"a.0": 1}); // Insert the initial document set. for (let i = 0; i < initialDocs; ++i) { diff --git a/jstests/replsets/initial_sync_move_forward.js b/jstests/replsets/initial_sync_move_forward.js index 8a2c6589d41..311ab315536 100644 --- a/jstests/replsets/initial_sync_move_forward.js +++ b/jstests/replsets/initial_sync_move_forward.js @@ -36,7 +36,7 @@ bulk.insert({_id: count - 1, x: count - 1, longString: longString}); assert.commandWorked(bulk.execute()); // Create a unique index on {x: 1}. -assert.commandWorked(primaryColl.createIndex({x: 1}, {unique: true})); +assert.commandWorked(primaryColl.ensureIndex({x: 1}, {unique: true})); // Add a secondary. var secondary = diff --git a/jstests/replsets/reindex.js b/jstests/replsets/reindex.js index 211fbe55001..454e72f25e8 100644 --- a/jstests/replsets/reindex.js +++ b/jstests/replsets/reindex.js @@ -26,7 +26,7 @@ const secondaryDB = secondary.getDB(dbName); const secondaryColl = secondaryDB.getCollection(collName); assert.commandWorked(primaryColl.insert({a: 1000})); -assert.commandWorked(primaryColl.createIndex({a: 1})); +assert.commandWorked(primaryColl.ensureIndex({a: 1})); replTest.awaitReplication(); replTest.awaitReplication(); @@ -59,7 +59,7 @@ const testDB = standalone.getDB(dbName); const testColl = testDB.getCollection(collName); assert.commandWorked(testColl.insert({a: 1000})); -assert.commandWorked(testColl.createIndex({a: 1})); +assert.commandWorked(testColl.ensureIndex({a: 1})); assert.eq(2, testColl.getIndexes().length, "Standalone didn't have proper indexes before reindex"); assert.commandWorked(testColl.reIndex()); diff --git a/jstests/replsets/replset1.js b/jstests/replsets/replset1.js index 7ce4610495e..3ad42615db9 100644 --- a/jstests/replsets/replset1.js +++ b/jstests/replsets/replset1.js @@ -123,7 +123,7 @@ var doTest = function(signal) { }); t.save({a: 1000}); - t.createIndex({a: 1}); + t.ensureIndex({a: 1}); replTest.awaitReplication(); ts.forEach(function(z) { diff --git a/jstests/replsets/temp_namespace.js b/jstests/replsets/temp_namespace.js index a6a7a839ea6..f8a6f854a68 100644 --- a/jstests/replsets/temp_namespace.js +++ b/jstests/replsets/temp_namespace.js @@ -26,10 +26,10 @@ var secondaryDB = secondary.getDB('test'); // set up collections assert.commandWorked(primaryDB.runCommand( {applyOps: [{op: "c", ns: primaryDB.getName() + ".$cmd", o: {create: "temp1", temp: true}}]})); -primaryDB.temp1.createIndex({x: 1}); +primaryDB.temp1.ensureIndex({x: 1}); assert.commandWorked(primaryDB.runCommand( {applyOps: [{op: "c", ns: primaryDB.getName() + ".$cmd", o: {create: "temp2", temp: 1}}]})); -primaryDB.temp2.createIndex({x: 1}); +primaryDB.temp2.ensureIndex({x: 1}); assert.commandWorked(primaryDB.runCommand( {applyOps: [{op: "c", ns: primaryDB.getName() + ".$cmd", o: {create: "keep1", temp: false}}]})); assert.commandWorked(primaryDB.runCommand( diff --git a/jstests/sharding/addshard1.js b/jstests/sharding/addshard1.js index e7aa1920d6b..e43a2a48553 100644 --- a/jstests/sharding/addshard1.js +++ b/jstests/sharding/addshard1.js @@ -62,7 +62,7 @@ assert.eq( numObjs, sdb1.foo.count(), "wrong count after moving datbase that existed before addshard"); // make sure we can shard the original collections -sdb1.foo.createIndex({a: 1}, {unique: true}); // can't shard populated collection without an index +sdb1.foo.ensureIndex({a: 1}, {unique: true}); // can't shard populated collection without an index s.adminCommand({enablesharding: "testDB"}); s.adminCommand({shardcollection: "testDB.foo", key: {a: 1}}); s.adminCommand({split: "testDB.foo", middle: {a: Math.floor(numObjs / 2)}}); diff --git a/jstests/sharding/array_shard_key.js b/jstests/sharding/array_shard_key.js index 686d1d1085f..3acf841a1b0 100644 --- a/jstests/sharding/array_shard_key.js +++ b/jstests/sharding/array_shard_key.js @@ -71,7 +71,7 @@ value = coll.findOne({i: 1}); assert.commandWorked(coll.remove(Object.extend(value, {i: 1}))); assert.eq(coll.find().itcount(), 0); -coll.createIndex({_id: 1, i: 1, j: 1}); +coll.ensureIndex({_id: 1, i: 1, j: 1}); // Can insert document that will make index into a multi-key as long as it's not part of shard // key. coll.remove({}); @@ -119,7 +119,7 @@ for (var i = 0; i < 10; i++) { assert.commandWorked(coll.insert({i: [i, i + 1]})); } -coll.createIndex({_id: 1, i: 1}); +coll.ensureIndex({_id: 1, i: 1}); try { st.shardColl(coll, {_id: 1, i: 1}, {_id: ObjectId(), i: 1}); @@ -136,7 +136,7 @@ for (var i = 0; i < 10; i++) { assert.commandWorked(coll.insert({i: i})); } -coll.createIndex({_id: 1, i: 1}); +coll.ensureIndex({_id: 1, i: 1}); st.shardColl(coll, {_id: 1, i: 1}, {_id: ObjectId(), i: 1}); diff --git a/jstests/sharding/bulk_insert.js b/jstests/sharding/bulk_insert.js index a36c7c6c091..93192010dd9 100644 --- a/jstests/sharding/bulk_insert.js +++ b/jstests/sharding/bulk_insert.js @@ -22,8 +22,8 @@ st.ensurePrimaryShard(collSh.getDB() + "", st.shard0.shardName); assert.commandWorked(admin.runCommand({movePrimary: collUn.getDB() + "", to: st.shard1.shardName})); -printjson(collSh.createIndex({ukey: 1}, {unique: true})); -printjson(collUn.createIndex({ukey: 1}, {unique: true})); +printjson(collSh.ensureIndex({ukey: 1}, {unique: true})); +printjson(collUn.ensureIndex({ukey: 1}, {unique: true})); assert.commandWorked(admin.runCommand({shardCollection: collSh + "", key: {ukey: 1}})); assert.commandWorked(admin.runCommand({split: collSh + "", middle: {ukey: 0}})); diff --git a/jstests/sharding/coll_epoch_test1.js b/jstests/sharding/coll_epoch_test1.js index 115418017a2..4249265797e 100644 --- a/jstests/sharding/coll_epoch_test1.js +++ b/jstests/sharding/coll_epoch_test1.js @@ -45,7 +45,7 @@ st.configRS.awaitLastOpCommitted(); jsTest.log("Re-enabling sharding with a different key..."); st.ensurePrimaryShard(coll.getDB().getName(), st.shard1.shardName); -assert.commandWorked(coll.createIndex({notId: 1})); +assert.commandWorked(coll.ensureIndex({notId: 1})); assert.commandWorked(admin.runCommand({shardCollection: coll + "", key: {notId: 1}})); bulk = insertMongos.getCollection(coll + "").initializeUnorderedBulkOp(); diff --git a/jstests/sharding/covered_shard_key_indexes.js b/jstests/sharding/covered_shard_key_indexes.js index 300632c0d76..773a3d0927b 100644 --- a/jstests/sharding/covered_shard_key_indexes.js +++ b/jstests/sharding/covered_shard_key_indexes.js @@ -25,19 +25,19 @@ assert.commandWorked( assert.commandWorked(coll.insert({_id: true, a: true, b: true})); // Index without shard key query - not covered -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); assert.eq(1, coll.find({a: true}).explain(true).executionStats.totalDocsExamined); assert.eq(1, coll.find({a: true}, {_id: 1, a: 1}).explain(true).executionStats.totalDocsExamined); // Index with shard key query - covered when projecting assert.commandWorked(coll.dropIndexes()); -assert.commandWorked(coll.createIndex({a: 1, _id: 1})); +assert.commandWorked(coll.ensureIndex({a: 1, _id: 1})); assert.eq(1, coll.find({a: true}).explain(true).executionStats.totalDocsExamined); assert.eq(0, coll.find({a: true}, {_id: 1, a: 1}).explain(true).executionStats.totalDocsExamined); // Compound index with shard key query - covered when projecting assert.commandWorked(coll.dropIndexes()); -assert.commandWorked(coll.createIndex({a: 1, b: 1, _id: 1})); +assert.commandWorked(coll.ensureIndex({a: 1, b: 1, _id: 1})); assert.eq(1, coll.find({a: true, b: true}).explain(true).executionStats.totalDocsExamined); assert.eq( 0, @@ -52,7 +52,7 @@ st.printShardingStatus(); assert.commandWorked(coll.insert({_id: true, a: true, b: true})); // Index without shard key query - not covered -assert.commandWorked(coll.createIndex({a: 1})); +assert.commandWorked(coll.ensureIndex({a: 1})); assert.eq(1, coll.find({a: true}).explain(true).executionStats.totalDocsExamined); assert.eq(1, coll.find({a: true}, {_id: 0, a: 1}).explain(true).executionStats.totalDocsExamined); @@ -70,7 +70,7 @@ st.printShardingStatus(); assert.commandWorked(coll.insert({_id: true, a: true, b: true, c: true, d: true})); // Index without shard key query - not covered -assert.commandWorked(coll.createIndex({c: 1})); +assert.commandWorked(coll.ensureIndex({c: 1})); assert.eq(1, coll.find({c: true}).explain(true).executionStats.totalDocsExamined); assert.eq(1, coll.find({c: true}, {_id: 0, a: 1, b: 1, c: 1}) @@ -79,7 +79,7 @@ assert.eq(1, // Index with shard key query - covered when projecting assert.commandWorked(coll.dropIndex({c: 1})); -assert.commandWorked(coll.createIndex({c: 1, b: 1, a: 1})); +assert.commandWorked(coll.ensureIndex({c: 1, b: 1, a: 1})); assert.eq(1, coll.find({c: true}).explain(true).executionStats.totalDocsExamined); assert.eq(0, coll.find({c: true}, {_id: 0, a: 1, b: 1, c: 1}) @@ -88,7 +88,7 @@ assert.eq(0, // Compound index with shard key query - covered when projecting assert.commandWorked(coll.dropIndex({c: 1, b: 1, a: 1})); -assert.commandWorked(coll.createIndex({c: 1, d: 1, a: 1, b: 1, _id: 1})); +assert.commandWorked(coll.ensureIndex({c: 1, d: 1, a: 1, b: 1, _id: 1})); assert.eq(1, coll.find({c: true, d: true}).explain(true).executionStats.totalDocsExamined); assert.eq(0, coll.find({c: true, d: true}, {a: 1, b: 1, c: 1, d: 1}) @@ -104,7 +104,7 @@ st.printShardingStatus(); assert.commandWorked(coll.insert({_id: true, a: {b: true}, c: true})); // Index without shard key query - not covered -assert.commandWorked(coll.createIndex({c: 1})); +assert.commandWorked(coll.ensureIndex({c: 1})); assert.eq(1, coll.find({c: true}).explain(true).executionStats.totalDocsExamined); assert.eq( 1, @@ -112,7 +112,7 @@ assert.eq( // Index with shard key query - can be covered given the appropriate projection. assert.commandWorked(coll.dropIndex({c: 1})); -assert.commandWorked(coll.createIndex({c: 1, 'a.b': 1})); +assert.commandWorked(coll.ensureIndex({c: 1, 'a.b': 1})); assert.eq(1, coll.find({c: true}).explain(true).executionStats.totalDocsExamined); assert.eq( 0, @@ -127,7 +127,7 @@ st.printShardingStatus(); assert.commandWorked(st.shard0.getCollection(coll.toString()).insert({_id: "bad data", c: true})); // Index without shard key query - not covered but succeeds -assert.commandWorked(coll.createIndex({c: 1})); +assert.commandWorked(coll.ensureIndex({c: 1})); var explain = coll.find({c: true}).explain(true).executionStats; assert.eq(1, explain.nReturned); assert.eq(1, explain.totalDocsExamined); @@ -137,7 +137,7 @@ assert.eq(0, getChunkSkips(explain.executionStages.shards[0].executionStages)); // // NOTE: This is weird and only a result of the fact that we don't have a dedicated "does not // exist" value for indexes -assert.commandWorked(coll.createIndex({c: 1, a: 1})); +assert.commandWorked(coll.ensureIndex({c: 1, a: 1})); var explain = coll.find({c: true}, {_id: 0, a: 1, c: 1}).explain(true).executionStats; assert.eq(1, explain.nReturned); assert.eq(0, explain.totalDocsExamined); diff --git a/jstests/sharding/create_idx_empty_primary.js b/jstests/sharding/create_idx_empty_primary.js index 462a866e236..2641d7f7416 100644 --- a/jstests/sharding/create_idx_empty_primary.js +++ b/jstests/sharding/create_idx_empty_primary.js @@ -17,7 +17,7 @@ assert.commandWorked( assert.commandWorked(testDB.user.insert({_id: 0})); -var res = testDB.user.createIndex({i: 1}); +var res = testDB.user.ensureIndex({i: 1}); assert.commandWorked(res); var indexes = testDB.user.getIndexes(); diff --git a/jstests/sharding/delete_during_migrate.js b/jstests/sharding/delete_during_migrate.js index 3477f57bc85..108097bf808 100644 --- a/jstests/sharding/delete_during_migrate.js +++ b/jstests/sharding/delete_during_migrate.js @@ -28,7 +28,7 @@ for (var i = 0; i < 200000; i++) { assert.commandWorked(bulk.execute()); // enable sharding of the collection. Only 1 chunk. -t.createIndex({a: 1}); +t.ensureIndex({a: 1}); assert.commandWorked(st.s0.adminCommand({shardcollection: ns, key: {a: 1}})); diff --git a/jstests/sharding/drop_indexes_with_stale_config_error.js b/jstests/sharding/drop_indexes_with_stale_config_error.js index 20d969fd865..f84bcc88941 100644 --- a/jstests/sharding/drop_indexes_with_stale_config_error.js +++ b/jstests/sharding/drop_indexes_with_stale_config_error.js @@ -25,7 +25,7 @@ assert.commandWorked(st.s.adminCommand({split: ns, middle: {x: 0}})); assert.commandWorked(st.s.adminCommand({moveChunk: ns, find: {x: 100}, to: st.shard1.shardName})); flushRoutersAndRefreshShardMetadata(st, {ns}); -assert.commandWorked(mongos0Coll.createIndex({x: 1})); +assert.commandWorked(mongos0Coll.ensureIndex({x: 1})); // Move chunk without refreshing the recipient so that the recipient shard throws a // StaleShardVersion error upon receiving the drop index command. diff --git a/jstests/sharding/features2.js b/jstests/sharding/features2.js index 1cae75c30ae..9626392a43f 100644 --- a/jstests/sharding/features2.js +++ b/jstests/sharding/features2.js @@ -12,7 +12,7 @@ let db = s.getDB("test"); db.foo.save({x: 1}); db.foo.save({x: 2}); db.foo.save({x: 3}); -db.foo.createIndex({x: 1}); +db.foo.ensureIndex({x: 1}); let a = s.shard0.getDB("test"); let b = s.shard1.getDB("test"); @@ -73,7 +73,7 @@ db.mr.save({x: 1, tags: ["a", "b"]}); db.mr.save({x: 2, tags: ["b", "c"]}); db.mr.save({x: 3, tags: ["c", "a"]}); db.mr.save({x: 4, tags: ["b", "c"]}); -db.mr.createIndex({x: 1}); +db.mr.ensureIndex({x: 1}); let m = function() { this.tags.forEach(function(z) { diff --git a/jstests/sharding/fts_score_sort_sharded.js b/jstests/sharding/fts_score_sort_sharded.js index 1532ccf724b..262a676d89c 100644 --- a/jstests/sharding/fts_score_sort_sharded.js +++ b/jstests/sharding/fts_score_sort_sharded.js @@ -26,7 +26,7 @@ assert.commandWorked(coll.insert({_id: 1, a: "pizza"})); assert.commandWorked(coll.insert({_id: -1, a: "pizza pizza"})); assert.commandWorked(coll.insert({_id: 2, a: "pizza pizza pizza"})); assert.commandWorked(coll.insert({_id: -2, a: "pizza pizza pizza pizza"})); -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); // // Execute query with sort on document score, verify results are in correct order. @@ -76,7 +76,7 @@ assert.commandWorked(coll.insert({_id: 0, a: "pizza", b: [1, 4]})); assert.commandWorked(coll.insert({_id: 1, a: "pizza pizza", b: [6, 7]})); assert.commandWorked(coll.insert({_id: 2, a: "pizza", b: [2, 3]})); assert.commandWorked(coll.insert({_id: 3, a: "pizza pizza", b: [5, 8]})); -assert.commandWorked(coll.createIndex({a: "text"})); +assert.commandWorked(coll.ensureIndex({a: "text"})); results = coll.find({$text: {$search: "pizza"}}, {s: {$meta: "textScore"}}) .sort({s: {$meta: "textScore"}, b: 1}) diff --git a/jstests/sharding/hash_shard_non_empty.js b/jstests/sharding/hash_shard_non_empty.js index 01692518b66..865c103ce14 100644 --- a/jstests/sharding/hash_shard_non_empty.js +++ b/jstests/sharding/hash_shard_non_empty.js @@ -12,7 +12,7 @@ s.stopBalancer(); db.getCollection(coll).insert({a: 1}); -db.getCollection(coll).createIndex({a: "hashed"}); +db.getCollection(coll).ensureIndex({a: "hashed"}); var res = db.adminCommand({shardcollection: dbname + "." + coll, key: {a: "hashed"}}); assert.eq(res.ok, 1, "shardcollection didn't work"); s.printShardingStatus(); diff --git a/jstests/sharding/hash_shard_unique_compound.js b/jstests/sharding/hash_shard_unique_compound.js index acec60bf667..460d28789b9 100644 --- a/jstests/sharding/hash_shard_unique_compound.js +++ b/jstests/sharding/hash_shard_unique_compound.js @@ -21,7 +21,7 @@ assert.commandWorked(db.adminCommand({enablesharding: dbName})); assert.commandWorked(db.adminCommand({shardcollection: ns, key: {a: "hashed"}})); // Create unique index -assert.commandWorked(coll.createIndex({a: 1, b: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({a: 1, b: 1}, {unique: true})); jsTest.log("------ indexes -------"); jsTest.log(tojson(coll.getIndexes())); @@ -31,7 +31,7 @@ jsTest.log("------ dropping sharded collection to start part 2 -------"); coll.drop(); // Create unique index -assert.commandWorked(coll.createIndex({a: 1, b: 1}, {unique: true})); +assert.commandWorked(coll.ensureIndex({a: 1, b: 1}, {unique: true})); // shard a fresh collection using a hashed shard key assert.commandWorked(db.adminCommand({shardcollection: ns, key: {a: "hashed"}}), diff --git a/jstests/sharding/index1.js b/jstests/sharding/index1.js index 019a1100919..67c4c3ceeb6 100644 --- a/jstests/sharding/index1.js +++ b/jstests/sharding/index1.js @@ -23,8 +23,8 @@ for (var i = 0; i < 22; i++) { if (i == 0) { // Unique index exists, but not the right one. - coll.createIndex({num: 1}, {unique: true}); - coll.createIndex({x: 1}); + coll.ensureIndex({num: 1}, {unique: true}); + coll.ensureIndex({x: 1}); passed = false; try { @@ -37,8 +37,8 @@ for (var i = 0; i < 22; i++) { } if (i == 1) { // Unique index exists as prefix, also index exists - coll.createIndex({x: 1}); - coll.createIndex({x: 1, num: 1}, {unique: true}); + coll.ensureIndex({x: 1}); + coll.ensureIndex({x: 1, num: 1}, {unique: true}); try { s.adminCommand({shardcollection: "" + coll, key: {x: 1}}); @@ -49,8 +49,8 @@ for (var i = 0; i < 22; i++) { } if (i == 2) { // Non-unique index exists as prefix, also index exists. No unique index. - coll.createIndex({x: 1}); - coll.createIndex({x: 1, num: 1}); + coll.ensureIndex({x: 1}); + coll.ensureIndex({x: 1, num: 1}); passed = false; try { @@ -66,8 +66,8 @@ for (var i = 0; i < 22; i++) { } if (i == 3) { // Unique index exists as prefix, also unique index exists - coll.createIndex({num: 1}, {unique: true}); - coll.createIndex({num: 1, x: 1}, {unique: true}); + coll.ensureIndex({num: 1}, {unique: true}); + coll.ensureIndex({num: 1, x: 1}, {unique: true}); try { s.adminCommand({shardcollection: "" + coll, key: {num: 1}, unique: true}); @@ -78,7 +78,7 @@ for (var i = 0; i < 22; i++) { } if (i == 4) { // Unique index exists as id, also unique prefix index exists - coll.createIndex({_id: 1, num: 1}, {unique: true}); + coll.ensureIndex({_id: 1, num: 1}, {unique: true}); try { s.adminCommand({shardcollection: "" + coll, key: {_id: 1}, unique: true}); @@ -89,7 +89,7 @@ for (var i = 0; i < 22; i++) { } if (i == 5) { // Unique index exists as id, also unique prefix index exists - coll.createIndex({_id: 1, num: 1}, {unique: true}); + coll.ensureIndex({_id: 1, num: 1}, {unique: true}); try { s.adminCommand({shardcollection: "" + coll, key: {_id: 1, num: 1}, unique: true}); @@ -102,7 +102,7 @@ for (var i = 0; i < 22; i++) { coll.remove({}); // Unique index does not exist, also unique prefix index exists - coll.createIndex({num: 1, _id: 1}, {unique: true}); + coll.ensureIndex({num: 1, _id: 1}, {unique: true}); try { s.adminCommand({shardcollection: "" + coll, key: {num: 1}, unique: true}); @@ -165,8 +165,8 @@ for (var i = 0; i < 22; i++) { } if (i == 9) { // Unique index exists on a different field as well - coll.createIndex({num: 1}, {unique: true}); - coll.createIndex({x: 1}); + coll.ensureIndex({num: 1}, {unique: true}); + coll.ensureIndex({x: 1}); passed = false; try { @@ -189,7 +189,7 @@ for (var i = 0; i < 22; i++) { assert(!passed, "Should not be able to shard without index"); // now add containing index and try sharding by prefix - coll.createIndex({num: 1, x: 1}); + coll.ensureIndex({num: 1, x: 1}); try { s.adminCommand({shardcollection: "" + coll, key: {num: 1}}); @@ -208,7 +208,7 @@ for (var i = 0; i < 22; i++) { coll.remove({}); // empty collection with useful index. check new index not created - coll.createIndex({num: 1, x: 1}); + coll.ensureIndex({num: 1, x: 1}); try { s.adminCommand({shardcollection: "" + coll, key: {num: 1}}); @@ -226,7 +226,7 @@ for (var i = 0; i < 22; i++) { if (i == 12) { // check multikey values for x make index unusable for shard key coll.save({num: 100, x: [2, 3]}); - coll.createIndex({num: 1, x: 1}); + coll.ensureIndex({num: 1, x: 1}); passed = false; try { @@ -239,7 +239,7 @@ for (var i = 0; i < 22; i++) { } if (i == 13) { coll.save({num: [100, 200], x: 10}); - coll.createIndex({num: 1, x: 1}); + coll.ensureIndex({num: 1, x: 1}); passed = false; try { @@ -252,7 +252,7 @@ for (var i = 0; i < 22; i++) { } if (i == 14) { coll.save({num: 100, x: 10, y: [1, 2]}); - coll.createIndex({num: 1, x: 1, y: 1}); + coll.ensureIndex({num: 1, x: 1, y: 1}); passed = false; try { @@ -265,7 +265,7 @@ for (var i = 0; i < 22; i++) { } if (i == 15) { // try sharding with a hashed index - coll.createIndex({num: "hashed"}); + coll.ensureIndex({num: "hashed"}); try { s.adminCommand({shardcollection: "" + coll, key: {num: "hashed"}}); @@ -276,7 +276,7 @@ for (var i = 0; i < 22; i++) { } if (i == 16) { // create hashed index, but try to declare it unique when sharding - coll.createIndex({num: "hashed"}); + coll.ensureIndex({num: "hashed"}); passed = false; try { @@ -289,8 +289,8 @@ for (var i = 0; i < 22; i++) { } if (i == 17) { // create hashed index, but unrelated unique index present - coll.createIndex({x: "hashed"}); - coll.createIndex({num: 1}, {unique: true}); + coll.ensureIndex({x: "hashed"}); + coll.ensureIndex({num: 1}, {unique: true}); passed = false; try { @@ -303,8 +303,8 @@ for (var i = 0; i < 22; i++) { } if (i == 18) { // create hashed index, and a regular unique index exists on same field - coll.createIndex({num: "hashed"}); - coll.createIndex({num: 1}, {unique: true}); + coll.ensureIndex({num: "hashed"}); + coll.ensureIndex({num: 1}, {unique: true}); try { s.adminCommand({shardcollection: "" + coll, key: {num: "hashed"}}); @@ -315,7 +315,7 @@ for (var i = 0; i < 22; i++) { } if (i == 19) { // Create sparse index. - coll.createIndex({x: 1}, {sparse: true}); + coll.ensureIndex({x: 1}, {sparse: true}); passed = false; try { @@ -328,7 +328,7 @@ for (var i = 0; i < 22; i++) { } if (i == 20) { // Create partial index. - coll.createIndex({x: 1}, {filter: {num: {$gt: 1}}}); + coll.ensureIndex({x: 1}, {filter: {num: {$gt: 1}}}); passed = false; try { @@ -344,8 +344,8 @@ for (var i = 0; i < 22; i++) { // where // both are prefixed by the shard key. - coll.createIndex({x: 1, num: 1}, {filter: {num: {$gt: 1}}}); - coll.createIndex({x: 1, num: -1}); + coll.ensureIndex({x: 1, num: 1}, {filter: {num: {$gt: 1}}}); + coll.ensureIndex({x: 1, num: -1}); try { s.adminCommand({shardcollection: "" + coll, key: {x: 1}}); diff --git a/jstests/sharding/key_many.js b/jstests/sharding/key_many.js index e3ef862e8e8..86ac72100bd 100644 --- a/jstests/sharding/key_many.js +++ b/jstests/sharding/key_many.js @@ -219,7 +219,7 @@ for (var i = 0; i < types.length; i++) { assert.commandWorked( c.update(makeObjectDotted(curT.values[3]), {$set: {xx: 17}}, {upsert: true})); - assert.commandWorked(c.createIndex({_id: 1})); + assert.commandWorked(c.ensureIndex({_id: 1})); // multi update var mysum = 0; diff --git a/jstests/sharding/limit_push.js b/jstests/sharding/limit_push.js index a6773f1263e..ef6b7a1c903 100644 --- a/jstests/sharding/limit_push.js +++ b/jstests/sharding/limit_push.js @@ -9,7 +9,7 @@ var db = s.getDB("test"); for (i = 0; i < 100; i++) { db.limit_push.insert({_id: i, x: i}); } -db.limit_push.createIndex({x: 1}); +db.limit_push.ensureIndex({x: 1}); assert.eq(100, db.limit_push.find().length(), "Incorrect number of documents"); // Shard the collection diff --git a/jstests/sharding/mongos_validate_writes.js b/jstests/sharding/mongos_validate_writes.js index 0852dccf763..fbcd98249f6 100644 --- a/jstests/sharding/mongos_validate_writes.js +++ b/jstests/sharding/mongos_validate_writes.js @@ -19,7 +19,7 @@ var staleCollB = staleMongosB.getCollection(coll + ""); assert.commandWorked(admin.runCommand({enableSharding: coll.getDB() + ""})); st.ensurePrimaryShard(coll.getDB().getName(), st.shard1.shardName); -coll.createIndex({a: 1}); +coll.ensureIndex({a: 1}); // Shard the collection on {a: 1} and move one chunk to another shard. Updates need to be across // two shards to trigger an error, otherwise they are versioned and will succeed after raising @@ -32,7 +32,7 @@ staleCollB.findOne(); // Change the collection sharding state coll.drop(); -coll.createIndex({b: 1}); +coll.ensureIndex({b: 1}); st.shardColl(coll, {b: 1}, {b: 0}, {b: 1}, coll.getDB(), true); // Make sure that we can successfully insert, even though we have stale state @@ -40,7 +40,7 @@ assert.commandWorked(staleCollA.insert({b: "b"})); // Change the collection sharding state coll.drop(); -coll.createIndex({c: 1}); +coll.ensureIndex({c: 1}); st.shardColl(coll, {c: 1}, {c: 0}, {c: 1}, coll.getDB(), true); // Make sure we can successfully upsert, even though we have stale state @@ -52,7 +52,7 @@ assert.commandFailedWithCode(staleCollB.update({b: "b"}, {b: "b"}, true), // Change the collection sharding state coll.drop(); -coll.createIndex({d: 1}); +coll.ensureIndex({d: 1}); st.shardColl(coll, {d: 1}, {d: 0}, {d: 1}, coll.getDB(), true); // Make sure we can successfully update, even though we have stale state @@ -68,7 +68,7 @@ assert.eq(staleCollB.findOne().x, "x"); // Change the collection sharding state coll.drop(); -coll.createIndex({e: 1}); +coll.ensureIndex({e: 1}); // Deletes need to be across two shards to trigger an error. st.ensurePrimaryShard(coll.getDB().getName(), st.shard0.shardName); st.shardColl(coll, {e: 1}, {e: 0}, {e: 1}, coll.getDB(), true); diff --git a/jstests/sharding/move_chunk_missing_idx.js b/jstests/sharding/move_chunk_missing_idx.js index f81369a4a48..16cc64ddddd 100644 --- a/jstests/sharding/move_chunk_missing_idx.js +++ b/jstests/sharding/move_chunk_missing_idx.js @@ -19,7 +19,7 @@ testDB.adminCommand({shardCollection: 'test.user', key: {x: 1}}); // 2. Split chunk into 3 parts. // 3. Move 1 chunk to 2nd shard - should have no issues -testDB.user.createIndex({a: 1, b: 1}); +testDB.user.ensureIndex({a: 1, b: 1}); testDB.adminCommand({split: 'test.user', middle: {x: 0}}); testDB.adminCommand({split: 'test.user', middle: {x: 10}}); diff --git a/jstests/sharding/move_chunk_wc.js b/jstests/sharding/move_chunk_wc.js index b37e2392203..7dc75204d19 100644 --- a/jstests/sharding/move_chunk_wc.js +++ b/jstests/sharding/move_chunk_wc.js @@ -30,7 +30,7 @@ var numberDoc = 20; var s0 = st.shard0.shardName; var s1 = st.shard1.shardName; -coll.createIndex({x: 1}, {unique: true}); +coll.ensureIndex({x: 1}, {unique: true}); st.ensurePrimaryShard(db.toString(), s0); st.shardColl(collName, {x: 1}, {x: numberDoc / 2}, {x: numberDoc / 2}, db.toString(), true); diff --git a/jstests/sharding/prefix_shard_key.js b/jstests/sharding/prefix_shard_key.js index b25df2d838b..fdec2e887ec 100644 --- a/jstests/sharding/prefix_shard_key.js +++ b/jstests/sharding/prefix_shard_key.js @@ -49,7 +49,7 @@ assert.throws(function() { }); // create usable index -assert.commandWorked(coll.createIndex({num: 1, x: 1})); +assert.commandWorked(coll.ensureIndex({num: 1, x: 1})); // usable index, doc with empty 'num' value assert.commandWorked(coll.insert({x: -5})); @@ -84,7 +84,7 @@ assert.commandWorked(s.s0.adminCommand({ // Migrations and splits will still work on a sharded collection that only has multi key // index. -db.user.createIndex({num: 1, x: 1}); +db.user.ensureIndex({num: 1, x: 1}); db.adminCommand({shardCollection: 'test.user', key: {num: 1}}); var indexCount = db.user.getIndexes().length; @@ -152,11 +152,11 @@ for (i = 0; i < 3; i++) { // declare a longer index if (i == 0) { - assert.commandWorked(coll2.createIndex({skey: 1, extra: 1})); + assert.commandWorked(coll2.ensureIndex({skey: 1, extra: 1})); } else if (i == 1) { - assert.commandWorked(coll2.createIndex({skey: 1, extra: -1})); + assert.commandWorked(coll2.ensureIndex({skey: 1, extra: -1})); } else if (i == 2) { - assert.commandWorked(coll2.createIndex({skey: 1, extra: 1, superfluous: -1})); + assert.commandWorked(coll2.ensureIndex({skey: 1, extra: 1, superfluous: -1})); } // then shard collection on prefix diff --git a/jstests/sharding/printShardingStatus.js b/jstests/sharding/printShardingStatus.js index e0439d63bc1..691f627ef72 100644 --- a/jstests/sharding/printShardingStatus.js +++ b/jstests/sharding/printShardingStatus.js @@ -115,7 +115,7 @@ config.getCollectionInfos().forEach(function(c) { delete i.key; delete i.ns; delete i.v; - assert.commandWorked(configCopy.getCollection(c.name).createIndex(key, i)); + assert.commandWorked(configCopy.getCollection(c.name).ensureIndex(key, i)); }); }); diff --git a/jstests/sharding/query/explain_cmd.js b/jstests/sharding/query/explain_cmd.js index fb1d789e1db..b07eacbfb3f 100644 --- a/jstests/sharding/query/explain_cmd.js +++ b/jstests/sharding/query/explain_cmd.js @@ -12,8 +12,8 @@ var explain; // 'b'. var collSharded = db.getCollection("mongos_explain_cmd"); collSharded.drop(); -collSharded.createIndex({a: 1}); -collSharded.createIndex({b: 1}); +collSharded.ensureIndex({a: 1}); +collSharded.ensureIndex({b: 1}); // Enable sharding. assert.commandWorked(db.adminCommand({enableSharding: db.getName()})); @@ -65,8 +65,8 @@ assert.commandFailed(explain); // Setup a collection that is not sharded. var collUnsharded = db.getCollection("mongos_explain_cmd_unsharded"); collUnsharded.drop(); -collUnsharded.createIndex({a: 1}); -collUnsharded.createIndex({b: 1}); +collUnsharded.ensureIndex({a: 1}); +collUnsharded.ensureIndex({b: 1}); for (var i = 0; i < 3; i++) { collUnsharded.insert({_id: i, a: i, b: 1}); diff --git a/jstests/sharding/query/explain_exec_stats_on_shards.js b/jstests/sharding/query/explain_exec_stats_on_shards.js index 253b47a3238..fa2a21864d8 100644 --- a/jstests/sharding/query/explain_exec_stats_on_shards.js +++ b/jstests/sharding/query/explain_exec_stats_on_shards.js @@ -98,7 +98,7 @@ st.ensurePrimaryShard(db.getName(), st.shard0.shardName); // Setup an unsharded collection. const unshardedColl = db.getCollection(`${jsTest.name()}_unsharded`); unshardedColl.drop(); - assert.commandWorked(unshardedColl.createIndex({a: 1})); + assert.commandWorked(unshardedColl.ensureIndex({a: 1})); // Add documents to the collection. const numDocs = 10; diff --git a/jstests/sharding/query/explain_find_and_modify_sharded.js b/jstests/sharding/query/explain_find_and_modify_sharded.js index 65f5dc17d6c..a8dad43a201 100644 --- a/jstests/sharding/query/explain_find_and_modify_sharded.js +++ b/jstests/sharding/query/explain_find_and_modify_sharded.js @@ -17,7 +17,7 @@ var shardKey = {a: 1}; var shardedColl = testDB.getCollection(collName); shardedColl.drop(); assert.commandWorked(testDB.createCollection(collName)); -assert.commandWorked(shardedColl.createIndex(shardKey)); +assert.commandWorked(shardedColl.ensureIndex(shardKey)); // Enable sharding on the database and shard the collection. // Use "st.shard0.shardName" as the primary shard. diff --git a/jstests/sharding/query/find_getmore_cmd.js b/jstests/sharding/query/find_getmore_cmd.js index 997d3bb2207..d2dcc311523 100644 --- a/jstests/sharding/query/find_getmore_cmd.js +++ b/jstests/sharding/query/find_getmore_cmd.js @@ -25,7 +25,7 @@ assert.commandWorked(coll.insert({_id: 1, a: 5})); assert.commandWorked(coll.insert({_id: 5, a: 20, b: "foo foo foo"})); assert.commandWorked(coll.insert({_id: 9, a: 3})); -assert.commandWorked(coll.createIndex({b: "text"})); +assert.commandWorked(coll.ensureIndex({b: "text"})); assert.commandWorked(db.adminCommand({enableSharding: db.getName()})); st.ensurePrimaryShard(db.getName(), st.shard0.shardName); diff --git a/jstests/sharding/query/geo_near_sharded.js b/jstests/sharding/query/geo_near_sharded.js index d68dcdec140..cf09b14a533 100644 --- a/jstests/sharding/query/geo_near_sharded.js +++ b/jstests/sharding/query/geo_near_sharded.js @@ -39,7 +39,7 @@ function test(st, db, sharded, indexType) { assert.commandWorked(bulk.execute()); assert.eq(db[coll].count(), numPts); - assert.commandWorked(db[coll].createIndex({loc: indexType})); + assert.commandWorked(db[coll].ensureIndex({loc: indexType})); let res = assert.commandWorked(db.runCommand({ aggregate: coll, diff --git a/jstests/sharding/read_pref_cmd.js b/jstests/sharding/read_pref_cmd.js index d3ac3f4c03a..3fa06255bfc 100644 --- a/jstests/sharding/read_pref_cmd.js +++ b/jstests/sharding/read_pref_cmd.js @@ -307,7 +307,7 @@ let testConnReadPreference = function(conn, isMongos, rsNodes, {readPref, expect cmdTest( {dbStats: 1}, allowedOnSecondary.kAlways, true, formatProfileQuery(kDbName, {dbStats: 1})); - assert.commandWorked(shardedColl.createIndex({loc: '2d'})); + assert.commandWorked(shardedColl.ensureIndex({loc: '2d'})); // TODO: SERVER-38961 Remove when simultaneous index builds complete. // Run a no-op command and wait for it to be applied on secondaries. Due to the asynchronous diff --git a/jstests/sharding/refine_shardkey_config_cache_refresh.js b/jstests/sharding/refine_shardkey_config_cache_refresh.js index 595e4f87cda..9b343353bd3 100644 --- a/jstests/sharding/refine_shardkey_config_cache_refresh.js +++ b/jstests/sharding/refine_shardkey_config_cache_refresh.js @@ -22,7 +22,7 @@ assert.commandWorked(st.s.adminCommand({split: 'test.user', middle: {x: 10}})); assert.commandWorked(testDB.user.insert({x: 1, y: 1})); assert.commandWorked(testDB.user.insert({x: 10, y: 1})); -testDB.user.createIndex({x: 1, y: 1}); +testDB.user.ensureIndex({x: 1, y: 1}); let priConn = st.rs0.getPrimary(); assert.commandWorked( diff --git a/jstests/sharding/shard1.js b/jstests/sharding/shard1.js index 12f326a32f6..d00a961be52 100644 --- a/jstests/sharding/shard1.js +++ b/jstests/sharding/shard1.js @@ -11,7 +11,7 @@ assert.commandWorked(db.foo.insert({num: 1, name: "eliot"})); assert.commandWorked(db.foo.insert({num: 2, name: "sara"})); assert.commandWorked(db.foo.insert({num: -1, name: "joe"})); -assert.commandWorked(db.foo.createIndex({num: 1})); +assert.commandWorked(db.foo.ensureIndex({num: 1})); assert.eq(3, db.foo.find().length(), "A"); diff --git a/jstests/sharding/shard7.js b/jstests/sharding/shard7.js index 9f56553aa7f..094688d6e37 100644 --- a/jstests/sharding/shard7.js +++ b/jstests/sharding/shard7.js @@ -47,7 +47,7 @@ assert.commandWorked(c.update(unsatisfiable, {$set: {c: 1}}, false, true)); assert.eq(2, c.count()); assert.eq(0, c.count({c: 1})); -c.createIndex({loc: '2d'}); +c.ensureIndex({loc: '2d'}); c.save({a: 2, b: 2, loc: [0, 0]}); near = c.aggregate({$geoNear: {near: [0, 0], query: unsatisfiable, distanceField: "dist"}}).toArray(); diff --git a/jstests/sharding/shard_insert_getlasterror_w2.js b/jstests/sharding/shard_insert_getlasterror_w2.js index 629b97d321a..9db83bf5781 100644 --- a/jstests/sharding/shard_insert_getlasterror_w2.js +++ b/jstests/sharding/shard_insert_getlasterror_w2.js @@ -47,7 +47,7 @@ assert.commandWorked(mongosConn.adminCommand({addshard: replSet1.getURL()})); // Enable sharding on test db and its collection foo assert.commandWorked(mongosConn.getDB('admin').runCommand({enablesharding: testDBName})); -testDB[testCollName].createIndex({x: 1}); +testDB[testCollName].ensureIndex({x: 1}); assert.commandWorked(mongosConn.getDB('admin').runCommand( {shardcollection: testDBName + '.' + testCollName, key: {x: 1}})); diff --git a/jstests/sharding/sharding_rs1.js b/jstests/sharding/sharding_rs1.js index 02b5e13b213..61fe245d75b 100644 --- a/jstests/sharding/sharding_rs1.js +++ b/jstests/sharding/sharding_rs1.js @@ -52,7 +52,7 @@ assert.eq(num, db.foo.find().itcount(), "C2"); assert.eq(num, db.foo.find().sort({_id: 1}).itcount(), "C3"); assert.eq(num, db.foo.find().sort({_id: -1}).itcount(), "C4"); -db.foo.createIndex({x: 1}); +db.foo.ensureIndex({x: 1}); assert.eq(num, db.foo.find().sort({x: 1}).itcount(), "C5"); assert.eq(num, db.foo.find().sort({x: -1}).itcount(), "C6"); diff --git a/jstests/sharding/sharding_rs2.js b/jstests/sharding/sharding_rs2.js index 4c8f70c569d..8ae4a16185b 100644 --- a/jstests/sharding/sharding_rs2.js +++ b/jstests/sharding/sharding_rs2.js @@ -122,7 +122,7 @@ assert.lte(before.query + 10, after.query, "B3"); // --- add more data ---- -db.foo.createIndex({x: 1}); +db.foo.ensureIndex({x: 1}); var bulk = db.foo.initializeUnorderedBulkOp(); for (var i = 0; i < 100; i++) { diff --git a/jstests/sharding/stats.js b/jstests/sharding/stats.js index f69aefc6825..0f9f00a667c 100644 --- a/jstests/sharding/stats.js +++ b/jstests/sharding/stats.js @@ -144,7 +144,7 @@ collStatComp(coll_not_scaled, coll_scaled_1024, 1024, true); (function() { var t = db.foo; -assert.commandWorked(t.createIndex({a: 1})); +assert.commandWorked(t.ensureIndex({a: 1})); assert.eq(2, t.getIndexes().length); var isWiredTiger = diff --git a/jstests/sharding/trace_missing_docs_test.js b/jstests/sharding/trace_missing_docs_test.js index 460f392e1c8..ab7b1c058a8 100644 --- a/jstests/sharding/trace_missing_docs_test.js +++ b/jstests/sharding/trace_missing_docs_test.js @@ -20,7 +20,7 @@ var testDocMissing = function(useReplicaSet) { assert.commandWorked(admin.runCommand({enableSharding: coll.getDB() + ""})); st.ensurePrimaryShard(coll.getDB() + "", st.shard0.shardName); - coll.createIndex({sk: 1}); + coll.ensureIndex({sk: 1}); assert.commandWorked(admin.runCommand({shardCollection: coll + "", key: {sk: 1}})); assert.commandWorked(coll.insert({_id: 12345, sk: 67890, hello: "world"})); diff --git a/jstests/slow1/conc_update.js b/jstests/slow1/conc_update.js index 0ca9ea81bea..80adb4955e4 100644 --- a/jstests/slow1/conc_update.js +++ b/jstests/slow1/conc_update.js @@ -16,7 +16,7 @@ for (var i = 0; i < NRECORDS; i++) { assert.commandWorked(bulk.execute()); print("making an index (this will take a while)"); -db.conc.createIndex({x: 1}); +db.conc.ensureIndex({x: 1}); var c1 = db.conc.count({x: {$lt: NRECORDS}}); diff --git a/src/mongo/shell/collection.js b/src/mongo/shell/collection.js index 2043fcfbe74..ff218371d39 100644 --- a/src/mongo/shell/collection.js +++ b/src/mongo/shell/collection.js @@ -66,6 +66,8 @@ DBCollection.prototype.help = function() { ".unhideIndex( \"indexName\" ) or db." + shortName + ".unhideIndex( { \"indexKey\" : 1 } )"); print("\tdb." + shortName + ".dropIndexes()"); + print("\tdb." + shortName + + ".ensureIndex(keypattern[,options]) - DEPRECATED, use createIndex() instead"); print("\tdb." + shortName + ".explain().help() - show explain help"); print("\tdb." + shortName + ".reIndex()"); print( @@ -685,6 +687,24 @@ DBCollection.prototype.createIndexes = function(keys, options, commitQuorum) { {createIndexes: this.getName(), indexes: indexSpecs, commitQuorum: commitQuorum}); }; +DBCollection.prototype.ensureIndex = function(keys, options) { + if (arguments.length > 2) { + throw new Error("ensureIndex accepts up to 2 arguments"); + } + + var result = this.createIndex(keys, options); + + if (this.getMongo().writeMode() != "legacy") { + return result; + } + + err = this.getDB().getLastErrorObj(); + if (err.err) { + return err; + } + // nothing returned on success +}; + DBCollection.prototype.reIndex = function() { return this._db.runCommand({reIndex: this.getName()}); }; |