我的文档看起来有点像这样:
> db.orders.find()
{
_id: ObjectId(),
_reminders: [{
notified: true,
timestamp: ISODate(),
completed: false
}]
}
{
_id: ObjectId(),
_reminders: []
}
我想要找到的是订单集合中的文档,其中“提醒”不包含特定时间范围内的提醒,但未完成。
db.orders.find({
'_reminders': {
$elemMatch: {
completed: false,
timestamp: { $ne: time }
}
}
});
问题是,这根本找不到没有任何提醒的订单。
如何查询?
答案 0 :(得分:2)
您应该使用$or查询。
db.orders.find({$or: [ { _reminders: [] }, here_put_your_query_with_time_match ]})
- 它将返回与您的查询匹配的文档以及带有空_reminders的文档
答案 1 :(得分:2)
这可以让你得到你想要的东西
db.getCollection('Clock').find({
$or : [
{
_reminders : {
$elemMatch : {
timestamp : {
$lte : ISODate("2019-07-12T15:35:32.278Z"),
$gte : ISODate("2012-07-12T15:35:32.278Z")
},
completed : false
}
}
},
{
_reminders : {$size : 0}
},
{
_reminders : {$exists : false}
}
]
})