【问题标题】:Mongo Aggregation Group and MatchMongo 聚合组和匹配
【发布时间】:2020-12-29 23:59:07
【问题描述】:

是否可以按 uuid 分组以查找最大版本,然后过滤标志?我希望先找到版本 3,然后查看它是否有标记“Y”。似乎在分组之前应用了过滤器,因此我得到的是第 1 版。

 {"uuid" : 1, "version" : 1, "name" : "Bob", "flag" : "Y"}
 {"uuid" : 1, "version" : 2, "name" : "Bob", "flag" : "N"}
 {"uuid" : 1, "version" : 3, "name" : "Bob", "flag" : "N"}

提前致谢!!

【问题讨论】:

  • 那些uuids实际上是相同的值吗?

标签: mongodb mongodb-query


【解决方案1】:

This is one way,如果我明白你的想法:

db.collection.aggregate({
  $group: {
    _id: "$uuid",
    docs: {
      $push: "$$ROOT"
    },
    "max_version": {
      "$max": "$version"
    }
  }
},
{
  $addFields: {
    docs: {
      "$filter": {
        "input": "$docs",
        "as": "d",
        "cond": {
          $eq: [
            "$$d.version",
            "$max_version"
          ],
          $eq: [
            "$$d.flag",
            "Y"
          ]
        }
      }
    }
  }
})

想法

  • $group by uuid 并提取组上最大的version
  • max_versionflag 过滤文档数组

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2018-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多