是標題很拗口,但它我可以簡潔地描述這個問題最簡單的辦法:在mongodb中如何選擇具有一個嵌入文檔但不是另一個的文檔?
我有一個文件,看起來像這樣:
{ "_id" : ObjectId("4e5044ecf9d7954533000002"), "events" : [
{
"state" : 1,
"time" : 1313882989,
},
{
"time" : 1313883005,
"state" : 0,
}
]}
你可以看到,「事件」是嵌入式文檔陣列。狀態:1表示該文檔當時被設置爲「活動」(UTC爲秒),而狀態:0表示當時被設置爲「非活動」。這基本上給我當這個文件是有效(從1313882989到1313883005)
現在我試着去確定哪些文件是活躍在任何特定時間,如在1313883013,該活動和非活動之間落在時間的時間範圍事件。
我能得到這個查詢的內容:
db.plays.find({events:{$elemMatch:{state:1,time:{$lte:1313883013}}}})
它匹配一個完整的嵌入式文件,其中狀態= 1和時間< 1313883013.這是不夠而是因爲我需要確保文檔還不含無效事件在或1313883013.之前,所以我已經試過這樣:
db.plays.find({events:{$elemMatch:{state:1,time:{$lte:1313883013}},$not:{$elemMatch:{state:0,time:{$lte:1313883013}}}}})
,但無濟於事。我也嘗試過不同的變化。
我希望我已經明確了這一點,提前感謝任何幫助!
事件是否可以有多個0/1轉換?或者你是說它是[],[1]或[1,0]作爲狀態允許的唯一三個選項? –
狀態基本上是一個「位標誌」0或1,沒有其他選項。 – talentedmrjones