MongoDB不在daterange里面

时间:2017-10-29 15:08:54

标签: node.js mongodb mongoose mongodb-query

我想查询不在数据范围内的数据。

我正在浏览文档并找到$not$nin,但我不知道如何应用$not逻辑运算符和$nin运算符。我试图包装$ not但是它告诉我一个错误告诉

Unknown Top Level Operator: $nin or $not

我基本上想查询日期范围内的数据,我可以简单地使用$gt$lt,但我的数据有点复杂。

我有两个字段startDateendDate,我应该使用这两个字段根据用户选择的数据范围查询数据。

支持用户选择2017-10-01 to 2017-10-10,我会在选择用户的日期范围之间的startDate小于2017-10-01endDate的数据很少(此方案应该查询时不排除),同样地,我可能会遇到与上述情况相反的情况,例如startDate在用户选择的日期范围内,endDate大于2017-10-10

我只是想排除

的位置
**`startDate`** and **`endDate`** < '2017-10-01'

**`startDate`** and **`endDate`** > '2017-10-10'

我试过的代码,

$not: {
    $or: [{
        $and: [
            { "startDate"  : { $lt: begin } },
            { "endDate"    : { $lt: begin } }
        ]
    },
    {
        $and: [
            { "startDate"  : { $gt: end } },
            { "endDate"  : { $gt: end } }
        ]
    }]
}

其中beginend是时刻对象

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

不包括

startDate endDate &lt; &#39; 2017年10月1日&#39;

startDate endDate &gt; &#39; 2017年10月10日&#39;

这基本上意味着您要查找文档,其中startDate和endDate都位于所选日期范围之间。为此,您可以使用以下查询

coll.find({'startDate': {'$gt': begin, '$lt': end},'endDate': {'$gt': begin, '$lt': end}})