Mongoose复杂查询

时间:2017-01-08 13:04:47

标签: node.js mongodb mongoose mongodb-query

使用猫鼬。 Schema看起来类似于:

{
  "name" : String,
  "start" : Date, 
  "stop" : Date
}

我正在尝试做的是建立一个查询,即(“AND”):

  1. “name”== value
  2. “start” - 不存在或“start”gte value
  3. “停止” - 不存在或“停止”lte值
  4. 另一方面,启动和停止可以通过,或者不能通过(任何一个)。

    我所有的尝试都完成了某种Mongo错误:)所以请求一些帮助。

    问候。

1 个答案:

答案 0 :(得分:2)

您的AND查询逻辑可以用以下两种方式之一表示:

隐含与操作

Model.find({
    "name": name,
    "start": { 
        "$or": [
            { "$exists": false },
            { "$gte": start } 
        ]
    },
    "stop": { 
        "$or": [
            { "$exists": false },
            { "$gte": stop } 
        ]
    }
}).exec(callback);

明确与操作:

Model.find({
    "$and": [
        { "name": name },
        {
            "start": { 
                "$or": [
                    { "$exists": false },
                    { "$gte": start } 
                ]
            }
        },
        {
            "stop": { 
                "$or": [
                    { "$exists": false },
                    { "$gte": stop } 
                ]
            }
        }
    ]
}).exec(callback);