如何在记录的嵌入文档的时间范围内查找文档?

时间:2011-08-24 20:36:27

标签: mongodb

我有一个看起来像这样的文件:

{ "_id" : ObjectId("4e5044ecf9d7954533000002"), "events" : [
        {
                "state" : 1,
                "time" : 1313882989,
        },
        {
                "time" : 1313883005,
                "state" : 0,
        }
]}

您可以看到“events”是嵌入式文档的数组。 state:1表示该文档当时设置为“active”(以UTC为单位),状态:0表示此时设置为“inactive”。这基本上给了我这个文件有效的时间范围(从1313882989到1313883005)

现在我试图确定哪些文件在任何特定时间都处于活动状态,例如在1313883013,这是一个介于活动和非活动事件之间的时间。

我可以通过此查询得到一些信息:

db.plays.find({events:{$elemMatch:{state:1,time:{$lte:1313883013}}}})

它匹配一个完整的嵌入式文档,其中state = 1 AND time< 1313883013。但这还不够,因为我需要确保文档 在1313883013或之前也不包含 非活动事件。所以我试过这个:

db.plays.find({events:{$elemMatch:{state:1,time:{$lte:1313883013}},$not:{$elemMatch:{state:0,time:{$lte:1313883013}}}}})

但无济于事。我也尝试了不同的变体。

我希望我已经说清楚了,提前感谢任何帮助!!

1 个答案:

答案 0 :(得分:0)

在查询中不要包含state:1。

从得到的结果中,检查状态值(0或1)。