35 lines
1.2 KiB
JavaScript
35 lines
1.2 KiB
JavaScript
// This test asserts on query plans expected from unsharded collections.
|
|
// @tags: [assumes_unsharded_collection, requires_fastcount]
|
|
|
|
// Test explain for {upsert: true} updates.
|
|
|
|
var t = db.jstests_explain_upsert;
|
|
t.drop();
|
|
|
|
var explain;
|
|
|
|
// Explained upsert against an empty collection should succeed and be a no-op.
|
|
explain = db.runCommand(
|
|
{explain: {update: t.getName(), updates: [{q: {a: 1}, u: {a: 1}, upsert: true}]}});
|
|
if (TestData.testingReplicaSetEndpoint) {
|
|
// TODO (SERVER-75857): Unify behavior between mongod and mongos when running explain on a
|
|
// nonexistent database.
|
|
assert.commandWorkedOrFailedWithCode(explain, ErrorCodes.NamespaceNotFound);
|
|
} else {
|
|
assert.commandWorked(explain);
|
|
}
|
|
|
|
// Collection should still not exist.
|
|
assert.eq(0, t.count());
|
|
assert(!db.getCollectionInfos({name: t.getName()}).length);
|
|
|
|
// Add a document to the collection.
|
|
t.insert({a: 3});
|
|
|
|
// An explained upsert against a non-empty collection should also succeed as a no-op.
|
|
explain = db.runCommand(
|
|
{explain: {update: t.getName(), updates: [{q: {a: 1}, u: {a: 1}, upsert: true}]}});
|
|
assert.commandWorked(explain);
|
|
assert.eq(1, t.count());
|
|
assert(db.getCollectionInfos({name: t.getName()}).length);
|