Files
mongo/jstests/core/query/explain/explain6.js
Zac 591928c619 SERVER-108478 JS formatted by prettier and remove clang-format (#39656)
GitOrigin-RevId: 6c8f6aded47f260aa4f7c231b17dae3302cb1e04
2025-08-21 17:27:09 +00:00

52 lines
1.3 KiB
JavaScript

// @tags: [
// assumes_balancer_off,
// requires_non_retryable_writes,
// requires_fcv_80,
// ]
// Basic test which checks the number of documents returned, keys examined, and documents
// examined as reported by explain.
const colName = jsTestName();
let t = db.getCollection(colName);
t.drop();
t.createIndex({a: 1, b: 1});
t.createIndex({b: 1, a: 1});
t.save({a: 0, b: 1});
t.save({a: 1, b: 0});
let explain = t.find({a: {$gte: 0}, b: {$gte: 0}}).explain(true);
assert.eq(2, explain.executionStats.nReturned);
assert.eq(2, explain.executionStats.totalKeysExamined);
assert.eq(2, explain.executionStats.totalDocsExamined);
// A limit of 2.
explain = t
.find({a: {$gte: 0}, b: {$gte: 0}})
.limit(-2)
.explain(true);
assert.eq(2, explain.executionStats.nReturned);
// A $or query.
explain = t
.find({
$or: [
{a: {$gte: 0}, b: {$gte: 1}},
{a: {$gte: 1}, b: {$gte: 0}},
],
})
.explain(true);
assert.eq(2, explain.executionStats.nReturned);
// A non $or case where totalKeysExamined != number of results
t.remove({});
t.save({a: "0", b: "1"});
t.save({a: "1", b: "0"});
explain = t.find({a: /0/, b: /1/}).explain(true);
assert.eq(1, explain.executionStats.nReturned);
assert.eq(2, explain.executionStats.totalKeysExamined);