MongoDB - 查找包含数组中具有null属性的元素的文档

时间:2017-08-22 13:11:40

标签: mongodb mongodb-query

我在mongodb中挣扎着看似简单的查询。

我有一个job集合,其中包含以下对象:

{
    "_id" : ObjectId("5995c1fc3c2a353a782ee51b"),
    "stages" : [
            {
                "start" : ISODate("2017-02-02T22:06:26Z"),
                "end" : ISODate("2017-02-03T22:06:26Z"),
                "name" : "stage_one"
            },
            {
                "start" : ISODate("2017-02-03T22:06:26Z"),
                "end" : ISODate("2017-02-07T20:34:01Z"),
                "name" : "stage_two"
            }
        ]
}

我想找一份第二阶段没有结束时间的工作,即end为空或未定义。

根据querying for nullquerying an array of embedded documents上的mongo文档,似乎正确的查询应该是:

db.job.findOne({'stages.1.end': null})

但是,运行该查询会返回上面 具有非空结束日期的作业。实际上,如果我使用count而不是findOne运行查询,我会看到所有作业都被返回 - 根本没有进行过滤。

为了完整性,以下是新mongo实例上的示例的输出:

Example

所以在这个例子中,我希望db.job.findOne({'stages.1.end': null})不返回任何内容,因为只有一个文档而且它的第二个阶段有一个非空的结束日期。

这就像是一个问题,只是我是一个白痴,如果是这样,我道歉。

预先感谢您的帮助,如果您需要更多详细信息,请与我们联系!

修改

经过一些实验,我认为我可以通过以下方式实现我的目标:

db.job.find({$or: [{'stages.1.end': { $type: 10 }}, {'stages.1.end': {$exists: false}}]})

虽然这可以完成工作,但它并不是最简单的方法,我仍然不理解为什么原始查询不起作用。如果有人能够对此有所了解,那就非常感激。

0 个答案:

没有答案