2016-03-08 91 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