Scala MongoDB 聚合组和匹配查询
Scala MongoDB aggregate group and match query
我想要一个从每个文档中取出最新版本的查询,并检查某个给定字符串 (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。
任何帮助将不胜感激。
找到答案:
collection
.aggregate(List(
`match`(equal("allowedApplications", "x...")),
group("$name", max("version", "$version"))
)
顺序不太一样,只是用累加器字段中的函数。
我想要一个从每个文档中取出最新版本的查询,并检查某个给定字符串 (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。 任何帮助将不胜感激。
找到答案:
collection
.aggregate(List(
`match`(equal("allowedApplications", "x...")),
group("$name", max("version", "$version"))
)
顺序不太一样,只是用累加器字段中的函数。