Skip to content

Commit

Permalink
Fix query $and operator. Add query operator tests.
Browse files Browse the repository at this point in the history
  • Loading branch information
tommy351 committed Nov 13, 2014
1 parent caf3cc4 commit 50d60cc
Show file tree
Hide file tree
Showing 3 changed files with 203 additions and 1 deletion.
2 changes: 1 addition & 1 deletion lib/schema.js
Original file line number Diff line number Diff line change
Expand Up @@ -623,7 +623,7 @@ Schema.prototype._parseQuery = function(queries){

switch (key){
case '$and':
stack = stack.concat(this._parseQuery(query));
stack = stack.concat(this._parseQueryArray(query));
break;

case '$or':
Expand Down
101 changes: 101 additions & 0 deletions test/scripts/model.js
Original file line number Diff line number Diff line change
Expand Up @@ -740,6 +740,107 @@ describe('Model', function(){
});
});

it('find() - $and', function(){
return User.insert([
{name: {first: 'John', last: 'Doe'}, age: 20},
{name: {first: 'Jane', last: 'Doe'}, age: 25},
{name: {first: 'Jack', last: 'White'}, age: 30}
]).then(function(data){
var query = User.find({
$and: [
{'name.last': 'Doe'},
{age: {$gt: 20}}
]
});

query.toArray().should.eql([data[1]]);

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('find() - $or', function(){
return User.insert([
{name: {first: 'John', last: 'Doe'}, age: 20},
{name: {first: 'Jane', last: 'Doe'}, age: 25},
{name: {first: 'Jack', last: 'White'}, age: 30}
]).then(function(data){
var query = User.find({
$or: [
{'name.last': 'White'},
{age: {$gt: 20}}
]
});

query.toArray().should.eql(data.slice(1));

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('find() - $nor', function(){
return User.insert([
{name: {first: 'John', last: 'Doe'}, age: 20},
{name: {first: 'Jane', last: 'Doe'}, age: 25},
{name: {first: 'Jack', last: 'White'}, age: 30}
]).then(function(data){
var query = User.find({
$nor: [
{'name.last': 'White'},
{age: {$gt: 20}}
]
});

query.toArray().should.eql([data[0]]);

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('find() - $not', function(){
return User.insert([
{name: {first: 'John', last: 'Doe'}, age: 20},
{name: {first: 'Jane', last: 'Doe'}, age: 25},
{name: {first: 'Jack', last: 'White'}, age: 30}
]).then(function(data){
var query = User.find({
$not: {'name.last': 'Doe'}
});

query.toArray().should.eql(data.slice(2));

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('find() - $where', function(){
return User.insert([
{name: {first: 'John', last: 'Doe'}, age: 20},
{name: {first: 'Jane', last: 'Doe'}, age: 25},
{name: {first: 'Jack', last: 'White'}, age: 30}
]).then(function(data){
var query = User.find({
$where: function(){
return this.name.last === 'Doe';
}
});

query.toArray().should.eql(data.slice(0, 2));

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('findOne()', function(){
return User.insert([
{age: 10},
Expand Down
101 changes: 101 additions & 0 deletions test/scripts/query.js
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,107 @@ describe('Query', function(){
});
});

it('find() - $and', function(){
return User.insert([
{name: 'John', age: 20},
{name: 'John', age: 25},
{name: 'Jack', age: 30}
]).then(function(data){
var query = User.find({}).find({
$and: [
{name: 'John'},
{age: {$gt: 20}}
]
});

query.toArray().should.eql([data[1]]);

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('find() - $or', function(){
return User.insert([
{name: 'John', age: 20},
{name: 'John', age: 25},
{name: 'Jack', age: 30}
]).then(function(data){
var query = User.find({}).find({
$or: [
{name: 'Jack'},
{age: {$gt: 20}}
]
});

query.toArray().should.eql(data.slice(1));

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('find() - $nor', function(){
return User.insert([
{name: 'John', age: 20},
{name: 'John', age: 25},
{name: 'Jack', age: 30}
]).then(function(data){
var query = User.find({}).find({
$nor: [
{name: 'Jack'},
{age: {$gt: 20}}
]
});

query.toArray().should.eql([data[0]]);

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('find() - $not', function(){
return User.insert([
{name: 'John', age: 20},
{name: 'John', age: 25},
{name: 'Jack', age: 30}
]).then(function(data){
var query = User.find({}).find({
$not: {name: 'John'}
});

query.toArray().should.eql([data[2]]);

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('find() - $where', function(){
return User.insert([
{name: 'John', age: 20},
{name: 'John', age: 25},
{name: 'Jack', age: 30}
]).then(function(data){
var query = User.find({}).find({
$where: function(){
return this.name === 'John';
}
});

query.toArray().should.eql(data.slice(0, 2));

return data;
}).map(function(item){
return User.removeById(item._id);
});
});

it('findOne()', function(){
return User.insert([
{age: 10},
Expand Down

0 comments on commit 50d60cc

Please sign in to comment.