1 | 'use strict';
|
2 |
|
3 | module.exports = function (dbType, context) {
|
4 |
|
5 | describe(dbType + ': $not', function () {
|
6 |
|
7 | it('works with simple syntax', function () {
|
8 | var db = context.db;
|
9 | var index = {
|
10 | "index": {
|
11 | "fields": ["age"]
|
12 | },
|
13 | "name": "age-index",
|
14 | "type": "json"
|
15 | };
|
16 |
|
17 | return db.createIndex(index).then(function () {
|
18 | return db.bulkDocs([
|
19 | { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
|
20 | { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
|
21 | { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
|
22 | { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
|
23 | ]);
|
24 | }).then(function () {
|
25 | return db.find({
|
26 | selector: {
|
27 | age:{$gte: 40},
|
28 | $not:{age: 75},
|
29 | }
|
30 | });
|
31 | }).then(function (resp) {
|
32 | var docs = resp.docs.map(function (doc) {
|
33 | delete doc._rev;
|
34 | return doc;
|
35 | });
|
36 |
|
37 | docs.should.deep.equal([
|
38 | { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
|
39 | { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
|
40 | { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}}
|
41 | ]);
|
42 | });
|
43 | });
|
44 |
|
45 | it('works with $and', function () {
|
46 | var db = context.db;
|
47 | var index = {
|
48 | "index": {
|
49 | "fields": ["age"]
|
50 | },
|
51 | "name": "age-index",
|
52 | "type": "json"
|
53 | };
|
54 |
|
55 | return db.createIndex(index).then(function () {
|
56 | return db.bulkDocs([
|
57 | { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
|
58 | { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
|
59 | { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
|
60 | { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
|
61 | ]);
|
62 | }).then(function () {
|
63 | return db.find({
|
64 | selector: {
|
65 | $and: [
|
66 | {age:{$gte: 40}},
|
67 | {$not:{age: {$eq: 75}}},
|
68 | ]
|
69 | }
|
70 | });
|
71 | }).then(function (resp) {
|
72 | var docs = resp.docs.map(function (doc) {
|
73 | delete doc._rev;
|
74 | return doc;
|
75 | });
|
76 |
|
77 | docs.should.deep.equal([
|
78 | { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
|
79 | { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
|
80 | { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}}
|
81 | ]);
|
82 | });
|
83 | });
|
84 |
|
85 | it('works with another combinational field', function () {
|
86 | var db = context.db;
|
87 | var index = {
|
88 | "index": {
|
89 | "fields": ["age"]
|
90 | },
|
91 | "name": "age-index",
|
92 | "type": "json"
|
93 | };
|
94 |
|
95 | return db.createIndex(index).then(function () {
|
96 | return db.bulkDocs([
|
97 | { _id: '1', age: 75, name: {first: 'Nancy', surname: 'Sinatra'}},
|
98 | { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
|
99 | { _id: '3', age: 80, name: {first: 'John', surname: 'Fogerty'}},
|
100 | { _id: '4', age: 76, name: {first: 'Mick', surname: 'Jagger'}},
|
101 | ]);
|
102 | }).then(function () {
|
103 | return db.find({
|
104 | selector: {
|
105 | $and: [
|
106 | {age:{$gte: 0}},
|
107 | {$not:{age: {$eq: 75}}},
|
108 | {$or: [
|
109 | {"name.first": "Eddie"},
|
110 | ]}
|
111 | ]
|
112 | }
|
113 | });
|
114 | }).then(function (resp) {
|
115 | var docs = resp.docs.map(function (doc) {
|
116 | delete doc._rev;
|
117 | return doc;
|
118 | });
|
119 |
|
120 | docs.should.deep.equal([
|
121 | { _id: '2', age: 40, name: {first: 'Eddie', surname: 'Vedder'}},
|
122 | ]);
|
123 | });
|
124 | });
|
125 | });
|
126 | };
|