summaryrefslogtreecommitdiff
path: root/jstests/core/index_diag.js
blob: 686a9e34b020bfd96adf516f5122574e5c556cfb (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
// @tags: [
//   assumes_balancer_off,
// ]
load("jstests/libs/fixture_helpers.js");

t = db.index_diag;
t.drop();

assert.commandWorked(t.createIndex({x: 1}));

all = [];
ids = [];
xs = [];

function r(a) {
    var n = [];
    for (var x = a.length - 1; x >= 0; x--)
        n.push(a[x]);
    return n;
}

for (i = 1; i < 4; i++) {
    o = {_id: i, x: -i};
    t.insert(o);
    all.push(o);
    ids.push({_id: i});
    xs.push({x: -i});
}

assert.eq(all, t.find().sort({_id: 1}).toArray());
assert.eq(r(all), t.find().sort({_id: -1}).toArray());

assert.eq(all, t.find().sort({x: -1}).toArray());
assert.eq(r(all), t.find().sort({x: 1}).toArray());

assert.eq(ids, t.find().sort({_id: 1}).returnKey().toArray());
assert.eq(r(ids), t.find().sort({_id: -1}).returnKey().toArray());
assert.eq(xs, t.find().sort({x: -1}).returnKey().toArray());
assert.eq(r(xs), t.find().sort({x: 1}).returnKey().toArray());

// SERVER-4981
if (FixtureHelpers.numberOfShardsForCollection(t) === 1) {
    // With only one shard we can reliably assert on the order of results with a hint, since they
    // will come straight off the index. However, without a sort specified, we cannot make this
    // assertion when there are multiple shards, since mongos can merge results from each shard in
    // whatever order it likes.
    assert.eq(r(xs), t.find().hint({x: 1}).returnKey().toArray());
    assert.commandWorked(t.createIndex({_id: 1, x: 1}));
    assert.eq(all, t.find().hint({_id: 1, x: 1}).returnKey().toArray());
}
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());