我正在尝试在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"}}
]}
)
有更清洁的方法吗?
答案 0 :(得分:2)
您将$not
放在错误的位置。试试这个:
db.test.find({"Published":{ $not:{$gt:"2011-08-02", $lt:"2011-08-06"} } })
有关详细信息,请参阅MongoDB docs about the $not
operator。
编辑因为评论此解决方案不起作用:
> 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" }