我目前正在尝试使用子元素的最后日期对MongoDB中的集合进行排序。
看来我应该使用.aggregate函数,但似乎无法解决它。
数据的结构是
{
_id: int,
cellNumber: string
messages: [
{
_id: int,
body: string,
date: Date/Time
}
]
}
看起来我应该使用代码
db.contacts.aggregate([
{ $group: { _id: "$_id", lastDate: { $last: "$messages.date" } } },
{ $sort: { lastDate: 1 } }
])
但是有2个孩子的元素总是返回2个日期
预期:
{ _id: parentId, lastDate: dateOfLastMessage }
实际:
{ _id: parentId, lastDate: [ dateOfMessage1, dateOfMessage2 ]}
答案 0 :(得分:1)
我认为这会给你你想要的结果(假设最后一次'你的意思是最近的日期):
db.contacts.aggregate([
{$unwind: '$messages'},
{$sort: {'messages.date': -1}},
{$group: {_id: "$_id", messages: {$push: '$messages.date'}}},
{$project: {messages: {$arrayElemAt: ['$messages', 0]}}},
{$group: {_id: '$_id', lastDate: {$last: '$messages'}}}
])
$arrayElemAt
运算符仅在Mongo 3.2版中引入。