Mongoose 复杂查询

Laz*_*ert 2 mongoose mongodb node.js mongodb-query

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

{
  "name" : String,
  "start" : Date, 
  "stop" : Date
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是构建一个查询,即(“AND”):

  1. “名称” == 值
  2. “开始” - 不存在或“开始”gte 值
  3. “停止” - 不存在或“停止”lte 值

另一方面, start 和 stop 可以通过,也可以不通过(任何一个)。

我所有的尝试都以某种 Mongo 错误结束:) 所以寻求帮助。

问候。

chr*_*dam 5

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

隐式 AND 运算

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

显式与操作:

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