2016-03-08 114 views
1

嗨我有這樣的MongoDB查詢。

.aggregate(
      [ 
       { $match : { comment_box : "somdata" } }, 

       { $project : { 
        comment : 1,      
         created_at: 1, 
         current_date: "$replies.created_at", 
        }, 
        dateDifference: { $subtract: [ new Date(), "$created_at"] } 
       }}, 
      ] 
     ) 

想象一下,我想從當前日期字段中的回覆數組中獲取created_at值。但這個查詢返回的

current_date: [ 
    "2016-03-08T13:48:27.882Z", 
    "2016-03-08T14:26:22.194Z" 
] 

,而不是從該陣列中的每個元件的電流created_at值

我已經嘗試了許多方法,但有錯誤

current_date: "$replies.0.created_at", 
current_date: "$replies.$.created_at", 
current_date: "$$replies.created_at", 

和等

請幫我檢索這樣的數據

current_date:"2016-03-08T13:48:27.882Z", 
+0

如何從日期數組中確定當前日期,它是否始終是數組中的第一個元素,或者您需要降序排列數組然後獲取第一個項? – chridam

+1

你可以顯示樣本文件嗎? – styvane

+0

https://codeshare.io/CrEXp這是結果 –

回答

1

我假設你想要最新的評論日期。在這種情況下,你可以只取$max

current_date: { $max: '$replies.created_at' } 

演示:

> db.comments.insert({_id: 0, replies: [{created_at: new Date('2017-04-03')}, {created_at: new Date('2017-02-03')} ]}) 
WriteResult({ "nInserted" : 1 }) 
> db.comments.insert({_id: 1, replies: []}) 
WriteResult({ "nInserted" : 1 }) 
> db.comments.aggregate([{$project: {current_date: {$max: '$replies.created_at'}}}]) 
{ "_id" : 0, "current_date" : ISODate("2017-04-03T00:00:00Z") } 
{ "_id" : 1, "current_date" : null } 

通知及空replies陣列的文件如何得到null