2011-08-24 54 views
0

我有一個文件,看起來像這樣:如何在錄製的嵌入文檔的時間範圍內找到文檔?

{ "_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在您的查詢。

從得到的結果中,檢查狀態值(0或1)。