微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Mongodb中聚合不同的数组字段

如何解决如何在Mongodb中聚合不同的数组字段

我有这个模式

const GroupSchema = new Schema({
  id: { type: String },users: [{ type: Number }],status: { type: Boolean }
},{
    timestamps: true
  });

我尝试汇总按创建日期排序的不同用户值。 例子

 {
    "users": [1111,2222],"createdAt": {
        "$date": "2020-09-30T10:51:33.058Z"
    }
}
    {
        "users": [1111,"createdAt": {
            "$date": "2020-09-29T10:51:33.058Z"
        }
    }

我尝试:

Group.aggregate([
        { "$sort": { "createdAt": -1 } },{ $group : { _id : "$users" }},//,created : { $last : "created" }
        { $match : { users : {$in : [1111] }  }}
    ])

我希望

 {
"users": [1111,"createdAt": {
    "$date": "2020-09-30T10:51:33.058Z"
}
}

我该如何解决? 谢谢。

解决方法

您可以尝试

  • $match您的情况
  • $sort通过createdAt date
  • $group按用户排列,并在最新文档中获取最新文档
  • $replaceWith替换root中的LatestDoc
db.collection.aggregate([
  { $match: { users: { $in: [1111] } } },{ $sort: { createdAt: -1 } },{
    $group: {
      _id: "$users",latestDoc: { $first: "$$ROOT" }
    }
  },{ $replaceWith: "$latestDoc" }
])

Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。