MongoDB - 按子集合中的最新日期排序

时间:2017-06-15 19:56:27

标签: mongodb

我目前正在尝试使用子元素的最后日期对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 ]}

1 个答案:

答案 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版中引入。

相关问题