我有以下 mongodb 集合
{ "id" : "yzes547",
"courseId" : "aw4a34y7",
"objectives" : [
{
"type" : "LESSON",
"id" : "dfhxytd"
},
{
"type" : "MODULE",
"id" : "rgzeerp"
}
]
}
我想在目标参数中为每种类型的 id 添加新字段。
期望的输出
{ "id" : "yzes547",
"courseId" : "aw4a34y7",
"objectives" : [
{
"type" : "LESSON",
"id" : "dfhxytd"
},
{
"type" : "MODULE",
"id" : "rgzeerp"
}
]
"lessonId": "dfhxytd",
"moduleId": "rgzeerp"
}
我尝试了以下查询,但它只返回 False。
db.account.aggregate([
{
'$project': {
'_id': 0,
'questionId': 1,
'courseId': 1,
'lessonId': {
'$cond': [
{
'$eq': [
'$objectives.type', 'LESSON'
]
}, '$objectives.id', False
]
},
'moduleId': {
'$cond': [
{
'$eq': [
'$objectives.type', 'MODULE'
]
}, '$objectives.id', False
]
}
是否可以查询数据库,以便我们可以通过一种聚合方法获取每种类型的新字段?
最佳答案
是的,您可以使用 $map
和 $objectToArray
轻松实现此目的来创建所需的字段,最后使用 $replaceRoot
和$mergeObjects
您可以将这些字段添加到原始结构中,如下所示:
db.collection.aggregate([
{
$replaceRoot: {
newRoot: {
"$mergeObjects": [
"$$ROOT",
{
"$arrayToObject": {
$map: {
input: "$objectives",
as: "obj",
in: {
k: {
$concat: [
{
"$toLower": "$$obj.type"
},
"Id"
]
},
v: "$$obj.id"
}
}
}
}
]
}
}
}
])
关于mongodb - 根据匹配条件向 Mongodb 聚合中的每个数组元素添加新字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70914044/