Files
mongo/jstests/core/fts_trailing_fields.js
David Storch 744738bd23 SERVER-21011 Fix query correctness problem related to covered matching for 2d/text indexes.
The fix ensures that the tightness predicates over the
trailing fields of 2d/text indexes is checked. Predicates
which are INEXACT_FETCH will then get affixed to the FETCH
stage of the plan rather than incorrectly affixed to the
IXSCAN.
2017-10-13 17:58:01 -04:00

23 lines
1.1 KiB
JavaScript

// Tests for predicates which can use the trailing field of a text index.
(function() {
"use strict";
const coll = db.fts_trailing_fields;
coll.drop();
assert.commandWorked(coll.createIndex({a: 1, b: "text", c: 1}));
assert.writeOK(coll.insert({a: 2, b: "lorem ipsum"}));
assert.eq(0, coll.find({a: 2, $text: {$search: "lorem"}, c: {$exists: true}}).itcount());
assert.eq(1, coll.find({a: 2, $text: {$search: "lorem"}, c: null}).itcount());
assert.eq(1, coll.find({a: 2, $text: {$search: "lorem"}, c: {$exists: false}}).itcount());
// An equality predicate on the leading field isn't useful, but it shouldn't cause any problems.
// Same with an $elemMatch predicate on one of the trailing fields.
coll.drop();
assert.commandWorked(coll.createIndex({a: 1, b: "text", "c.d": 1}));
assert.writeOK(coll.insert({a: 2, b: "lorem ipsum", c: {d: 3}}));
assert.eq(0, coll.find({a: [1, 2], $text: {$search: "lorem"}}).itcount());
assert.eq(0, coll.find({a: 2, $text: {$search: "lorem"}, c: {$elemMatch: {d: 3}}}).itcount());
}());