我有一个看起来像这样的文件:
{ "_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}}}}})
但无济于事。我也尝试了不同的变体。
我希望我已经说清楚了,提前感谢任何帮助!!
答案 0 :(得分:0)
在查询中不要包含state:1。
从得到的结果中,检查状态值(0或1)。