2013-05-16 66 views
0

我有一個看起來是這樣的文件:查詢與時間戳陣列

{ 
    "_id" : ObjectId("5191651568f1f6000282b81f"), 
    "updated_at" : "2013-05-16T09:46:16.199660", 
    "activities" : [ 
     { 
     "worker_name" : "image", 
     "completed_at" : "2013-05-13T21:34:59.293711" 
     }, 
     { 
     "worker_name" : "image", 
     "completed_at" : "2013-05-16T07:33:22.550405" 
     }, 
     { 
     "worker_name" : "image", 
     "completed_at" : "2013-05-16T07:41:47.845966" 
     } 
    ] 
} 

,我想只有找到這些文件,其中的updated_at時間比最後 activities.completed_at時間的情況下(陣列是按時間順序)

我現在有這一點,但它任何活動[]匹配。completed_at

{ 
"activities.completed_at" : {"$gte" : "updated_at"} 
} 

謝謝!

更新

嗯,我有不同的工人,每個人都有自己的 「completed_at」。

我將不得不顛倒activites如下:

activities: { image : 
        last : { 
         completed_at: t3, 
        }, 
        items: [ 
         {completed_at: t0}, 
         {completed_at: t1}, 
         {completed_at: t2}, 
         {completed_at: t3}, 
        ] 
    } 

,並使用此查詢:

{ 
"activities.image.last.completed_at" : {"$gte" : "updated_at"} 
} 
+0

我需要下拉到JavaScript? – rbp

回答

1

假設你不知道你有多少個活動(這將是容易如果您總是進行3次活動,例如activities.3.completed_at位置操作員),並且由於沒有位置操作員,所以簡短的答案是您無法高效地完成此操作。

插入活動時,我會更新記錄的updated_at值(或其他字段)。然後它變成一個微不足道的問題。

+0

好吧,我有不同的工人,每個人都有自己的「completed_at」。 我得反轉activites如下: 活動:{ '圖像': 最後:{ completed_at:T1, }, [ ] – rbp