summaryrefslogtreecommitdiff
path: root/jstests/core/where1.js
blob: 87ad49d16c162384f1859475be0712234eb0e7f4 (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
// @tags: [
//     # Uses $where operator
//     requires_scripting
// ]

t = db.getCollection("where1");
t.drop();

t.save({a: 1});
t.save({a: 2});
t.save({a: 3});

assert.eq(1,
          t.find(function() {
               return this.a == 2;
           }).length(),
          "A");

assert.eq(1, t.find({$where: "return this.a == 2"}).toArray().length, "B");
assert.eq(1, t.find({$where: "this.a == 2"}).toArray().length, "C");

assert.eq(1, t.find("this.a == 2").toArray().length, "D");

// SERVER-12117
// positional $ projection should fail on a $where query
assert.throws(function() {
    t.find({$where: "return this.a;"}, {'a.$': 1}).itcount();
});

// SERVER-12439: $where must be top-level
assert.throws(function() {
    t.find({a: 1, b: {$where: "this.a;"}}).itcount();
});
assert.throws(function() {
    t.find({a: {$where: "this.a;"}}).itcount();
});
assert.throws(function() {
    t.find({a: {$elemMatch: {$where: "this.a;"}}}).itcount();
});
assert.throws(function() {
    t.find({a: 3, "b.c": {$where: "this.a;"}}).itcount();
});

// SERVER-13503
assert.throws(function() {
    t.find({a: {$elemMatch: {$where: "this.a;", b: 1}}}).itcount();
});
assert.throws(function() {
    t.find({a: {$elemMatch: {b: 1, $where: "this.a;"}}}).itcount();
});
assert.throws(function() {
    t.find({a: {$elemMatch: {$and: [{b: 1}, {$where: "this.a;"}]}}}).itcount();
});