查找可能存在或不存在的数组中的元素

时间:2016-07-12 15:25:59

标签: javascript mongodb

我的文档看起来有点像这样:

> 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 }
    }
  }
});

问题是,这根本找不到没有任何提醒的订单。

如何查询?

2 个答案:

答案 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}
    }
]

})