MongoDb 用于根据 id 筛选列表并将此筛选列表映射到另一个字段的聚合
MongoDb aggregation for filtering list based on ids and mapping this filtered list to another field
在我的mongodb中我有如下所示的数据:
{
"classes": [
{
"classId": "SSC",
"studentIds": [
"1"
]
},
{
"classId": "HSC",
"studentIds": [
"2",
"3"
]
}
],
"students": [
{
"_id": "1",
"student": {}
},
{
"_id": "2",
"student": {}
},
{
"_id": "3",
"student": {}
}
],
}
我想要一个聚合查询,这样 returns 数据如下所示:
"classes": [
{
"classId":"SSC",
"students": [
{
"id": "1",
"student": {}
}
]
},
{
"classId":"HSC",
"students": [
{
"id": "2",
"student": {},
},
{
"id": "3",
"student": {}
}
]
}
]
在这里我有一个 ID 列表。它应该过滤该 ID 的学生列表并获取该对象并将该对象放入 class 数组中。
我已经尝试使用 mongodb 聚合来解决这个问题。但不幸的是,我无法为此编写查询。那么我们是否可以使用聚合来实现上述场景呢
我正在使用 spring 启动 mongoTemplate。
您可以使用 $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"] }
}
}
}
}
}
}
}
])
在我的mongodb中我有如下所示的数据:
{
"classes": [
{
"classId": "SSC",
"studentIds": [
"1"
]
},
{
"classId": "HSC",
"studentIds": [
"2",
"3"
]
}
],
"students": [
{
"_id": "1",
"student": {}
},
{
"_id": "2",
"student": {}
},
{
"_id": "3",
"student": {}
}
],
}
我想要一个聚合查询,这样 returns 数据如下所示:
"classes": [
{
"classId":"SSC",
"students": [
{
"id": "1",
"student": {}
}
]
},
{
"classId":"HSC",
"students": [
{
"id": "2",
"student": {},
},
{
"id": "3",
"student": {}
}
]
}
]
在这里我有一个 ID 列表。它应该过滤该 ID 的学生列表并获取该对象并将该对象放入 class 数组中。
我已经尝试使用 mongodb 聚合来解决这个问题。但不幸的是,我无法为此编写查询。那么我们是否可以使用聚合来实现上述场景呢
我正在使用 spring 启动 mongoTemplate。
您可以使用 $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"] }
}
}
}
}
}
}
}
])