我有一个使用Node + Mongoose构建的API,现在我想使用某些字段过滤数据。一切正常,但我怎样才能获得如下数据:1 < age < 3 AND 8 < age < 11
我正在尝试这个:
query.where('age').gte(1).lte(3);
query.where('age').gte(8).lte(11);
但是这段代码只让我8 < age < 11
谢谢!
答案 0 :(得分:1)
你的意思是$or
,因为$and
条件在条件成立的地方不可能重叠:
{
"$or": [
{ "age": { "$gte": 1, "$lte": 3 } },
{ "age": { "$gte": 8, "$lte": 11 } }
]
}
此外,您使用的是具有良好自由流动对象表示法的JavaScript,因此辅助方法在这里真的太过分了。请改用standard query operator语法。
只是一个演示,以显示表示相同查询的不同形式:
var mongoose = require('mongoose'),
Schema = mongoose.Schema;
var testSchema = new Schema({
"age": Number
});
var Test = mongoose.model( 'Test', testSchema, 'testcol' );
var query = Test.where({
"$or": [
{ "age": { "$gte": 1, "$lte": 3 } },
{ "age": { "$gte": 8, "$lte": 11 } }
]
});
console.log( JSON.stringify( query._conditions, undefined, 2 ) );
var query2 = Test.where().or([
{ "age": { "$gte": 1, "$lte": 3 } },
{ "age": { "$gte": 8, "$lte": 11 } }
]);
console.log( JSON.stringify( query2._conditions, undefined, 2 ) );
var query3 = Test.where().or(
[
Test.where("age").gte(1).lte(3)._conditions,
Test.where("age").gte(8).lte(11)._conditions
]
);
console.log( JSON.stringify( query3._conditions, undefined, 2 ) );
这也应该证明“帮助者”并没有真正为查询的基本形成增加太多价值。