查找MongoDB中特定范围之外的值的记录

时间:2014-12-18 13:07:47

标签: mongodb mongodb-query

我正在尝试在MongoDB中查找在特定时间段之外创建的记录。在特定时间段内搜索记录的查询非常简单:

db.test.find({"Published":{'$gt':"2011-08-02", '$lt':"2011-08-06"}})

很自然地,我在特定范围的“外部”尝试了这个:

db.test.find({'$not':{"Published":{'$gt':"2011-08-02", '$lt':"2011-08-06"}}})

但是这会返回一个空结果,然后肯定会发布记录。 我应该使用什么查询?谁能帮我?我正在使用原始的mongo查询。

提前致谢

---更新---

我发现以下查询有效,但它看起来不是完美的解决方案:

db.test.find(
  {'$or': [
    {"Published":{'$lt':"2011-02-02"}},
    {"Published":{'$gt':"2011-08-06"}}
  ]}
)

有更清洁的方法吗?

1 个答案:

答案 0 :(得分:2)

您将$not放在错误的位置。试试这个:

db.test.find({"Published":{ $not:{$gt:"2011-08-02", $lt:"2011-08-06"} } })

有关详细信息,请参阅MongoDB docs about the $notoperator

编辑因为评论此解决方案不起作用:

> db.dates.find()
{ "_id" : ObjectId("5492d46ef6226b581c80c0a2"), "a" : 1, "date" : "2011-08-04" }
{ "_id" : ObjectId("5492d4e2f6226b581c80c0a3"), "a" : 2, "date" : "2011-08-07" }

> db.dates.find({date:{$not:{$gt:"2011-08-02",$lt:"2011-08-06"}}})
{ "_id" : ObjectId("5492d4e2f6226b581c80c0a3"), "a" : 2, "date" : "2011-08-07" }