MongoDB比许多值更重要

时间:2014-10-02 00:00:36

标签: node.js mongodb mongoose mongodb-query

我有一个使用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

谢谢!

1 个答案:

答案 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 ) );

这也应该证明“帮助者”并没有真正为查询的基本形成增加太多价值。