MongoDb 聚合基于 ids 过滤列表并将此过滤列表映射到另一个字段
Posted
技术标签:
【中文标题】MongoDb 聚合基于 ids 过滤列表并将此过滤列表映射到另一个字段【英文标题】:MongoDb aggregation for filtering list based on ids and mapping this filtered list to another field 【发布时间】:2020-12-27 05:26:24 【问题描述】:在我的 mongodb 中,我的数据如下所示:
"classes": [
"classId": "SSC",
"studentIds": [
"1"
]
,
"classId": "HSC",
"studentIds": [
"2",
"3"
]
],
"students": [
"_id": "1",
"student":
,
"_id": "2",
"student":
,
"_id": "3",
"student":
],
我想要一个聚合查询,它返回如下所示的数据:
"classes": [
"classId":"SSC",
"students": [
"id": "1",
"student":
]
,
"classId":"HSC",
"students": [
"id": "2",
"student": ,
,
"id": "3",
"student":
]
]
在此我有 id 列表。它应该过滤该 id 的学生列表并获取该对象并将该对象放入类数组中。
我已经尝试使用 mongodb 聚合来解决这个问题。但不幸的是,我无法为此编写查询。那么我们可以使用聚合来实现上述场景吗?
我正在使用 Spring Boot mongoTemplate。
【问题讨论】:
【参考方案1】:你可以使用$map
和$filter
,
$map
输入classes
数组创建学生字段并在学生数组中执行$filter
并检查数组中的条件ID
db.collection.aggregate([
$project:
classes:
$map:
input: "$classes",
as: "c",
in:
classId: "$$c.classId",
students:
$filter:
input: "$students",
cond: $in: ["$$this._id", "$$c.studentIds"]
])
Playground
【讨论】:
如何使用 MongoTemplate 编写此查询 你的意思是spring mongo模板?如果是,那么我不知道 java spring。 你能帮我解决链接中的聚合查询吗:***.com/questions/64158838/…以上是关于MongoDb 聚合基于 ids 过滤列表并将此过滤列表映射到另一个字段的主要内容,如果未能解决你的问题,请参考以下文章