summaryrefslogtreecommitdiff
path: root/jstests/core/array_index_and_nonIndex_consistent.js
blob: 4e57b73286d1d30c1f236e572028f7d75d36c95e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/**
 * Make sure that $gt and $lt queries return the same results regardless of whether there is a
 * multikey index.
 */

(function() {
"use strict";
load("jstests/aggregation/extras/utils.js");  // arrayEq
const indexColl = db.indexColl;
const nonIndexedColl = db.nonIndexedColl;
indexColl.drop();
nonIndexedColl.drop();

db.indexColl.createIndex({val: 1});
const collList = [indexColl, nonIndexedColl];

collList.forEach(function(collObj) {
    assert.commandWorked(collObj.insert([
        {val: [1, 2]},
        {val: [3, 4]},
        {val: [3, 1]},
        {val: {"test": 5}},
        {val: [{"test": 7}]},
        {val: [true, false]},
        {val: 2},
        {val: 3},
        {val: 4},
        {val: [2]},
        {val: [3]},
        {val: [4]},
        {val: [1, true]},
        {val: [true, 1]},
        {val: [1, 4]},
        {val: [null]},
        {val: MinKey},
        {val: [MinKey]},
        {val: [MinKey, 3]},
        {val: [3, MinKey]},
        {val: MaxKey},
        {val: [MaxKey]},
        {val: [MaxKey, 3]},
        {val: [3, MaxKey]},
        {val: []},
    ]));
});

const queryList = [
    [2, 2], [0, 3],   [3, 0],      [1, 3],      [3, 1],       [1, 5],   [5, 1],      [1],
    [3],    [5],      {"test": 2}, {"test": 6}, [true, true], [true],   true,        1,
    3,      5,        null,        [null],      [],           [MinKey], [MinKey, 2], [MinKey, 4],
    MinKey, [MaxKey], [MaxKey, 2], [MaxKey, 4], MaxKey,       [],
];

let failedLT = [];
let failedGT = [];

queryList.forEach(function(q) {
    const queryLT = {val: {"$lt": q}};
    const queryGT = {val: {"$gt": q}};
    const projOutId = {_id: 0, val: 1};

    let indexRes = indexColl.find(queryLT, projOutId).sort({val: 1}).toArray();
    let nonIndexedRes = nonIndexedColl.find(queryLT, projOutId).sort({val: 1}).toArray();

    assert(arrayEq(indexRes, nonIndexedRes),
           "Ran query " + tojson(queryLT) + " and got mismatched results.\n Indexed: " +
               tojson(indexRes) + "\n NonIndexed: " + tojson(nonIndexedRes));

    indexRes = indexColl.find(queryGT, projOutId).sort({val: 1}).toArray();
    nonIndexedRes = nonIndexedColl.find(queryGT, projOutId).sort({val: 1}).toArray();
    assert(arrayEq(indexRes, nonIndexedRes),
           "Ran query " + tojson(queryGT) + " and got mismatched results.\n Indexed: " +
               tojson(indexRes) + "\n NonIndexed: " + tojson(nonIndexedRes));
});
})();