【问题标题】:Scala MongoDB aggregate group and match queryScala MongoDB 聚合组和匹配查询
【发布时间】:2021-02-25 13:21:28
【问题描述】:

我想要一个从每个文档中取出最新版本的查询,并检查某个给定字符串 (applicationId) 是否在列表 allowedApplications 中。

文档示例:

{
    "applicationId" : "y...",
    "allowedApplications": ["x..."],
    "name" : "some-name",
    "version" : 3
}
{
    "applicationId" : "y...",
    "allowedApplications": ["x..."],
    "name" : "some-name",
    "version" : 2
}
{
    "applicationId" : "x...",
    "allowedApplications": ["y..."],
    "name" : "some-other-name",
    "version" : 1
}

所以 MongoDB 查询是:

db.getCollection('..').aggregate(
[
    { "$match": { "allowedApplications": "x..." }},
    {"$group": { "_id": "$name", "version": { "$max": "$version" }}}
]
   )

查询将输出名称和版本(我可能会在稍后添加allowedApplications)。

我现在正在尝试在 Scala 的 mongodb 驱动程序中编写此代码。

我尝试了一堆东西,例如:

collection
            .aggregate(List(
                `match`(equal("allowedApplications", "x..")),
                group("$name", addToSet("version", addToSet("$max", "¢version")))
            )
            )

但无法让它工作。

使用 Scala 2.13.1 和 mongo-scala-driver 4.1.0。 任何帮助将不胜感激。

【问题讨论】:

    标签: mongodb scala mongodb-query aggregate mongo-scala-driver


    【解决方案1】:

    找到答案:

    collection
                .aggregate(List(
                    `match`(equal("allowedApplications", "x...")),
                    group("$name", max("version", "$version"))
                )
    

    顺序不太一样,只是使用累加器字段中的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-29
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      相关资源
      最近更新 更多