Mongodb 如何使用字段';s值作为$addFields阶段(聚合)中的数组索引
我在一个数组中有一个字符串,它在另一个数组中。我想将另一个字符串与连接到已经存在的字符串(位于两个数组的最后一个索引处)。我在文档中存储了最后一个元素的索引Mongodb 如何使用字段';s值作为$addFields阶段(聚合)中的数组索引,mongodb,pipeline,aggregation,Mongodb,Pipeline,Aggregation,我在一个数组中有一个字符串,它在另一个数组中。我想将另一个字符串与连接到已经存在的字符串(位于两个数组的最后一个索引处)。我在文档中存储了最后一个元素的索引 { _id: 'id', array1: [ 0: [...] ... m: [ 0: {} ... n: {id: 'id', string: 'hello'} ] ], i: m, j: n } 我想连接“世界!”到array1[m][n]处的字符
{
_id: 'id',
array1: [
0: [...]
...
m: [
0: {}
...
n: {id: 'id', string: 'hello'}
]
],
i: m,
j: n
}
我想连接“世界!”到array1[m][n]处的字符串。字符串
或换句话说,到array1[$i][$j]。字符串
我已经尝试了以下几个阶段,但都没有成功
{ $addFields: { array1.$i.$j.string: <expression> }
{ $addFields: { array1.$[i].$[j].string: <expression> }
{ $addFields: { array1.[$i].[$j].string: <expression> }
在运行管道之后,我希望得到相同的结构,但是字符串中有“helloworld”
{
_id: 'abc',
array1: [
0: {
id: 'def'
array2: [
0: {
id: '123',
string: 'hello world'
}
]
}
],
i: 0,
j: 0,
}
为了修改多个嵌套数组,其中一种方法是
$unwind
它们,根据需要修改数据,并最终聚合未打算的数据
db.collection.aggregate([
{"$unwind":"$array1"},
{"$unwind":"$array1.array2"},
{"$project":{
_id:1,
"array1.id":1,
"array1.array2.id":1,
"array1.array2.string":{"$concat":["$array1.array2.string","world"]}
}
},
{
"$group": {
"_id": {"obj_id": "$_id", "arr1_id": "$array1.id"},
"array2":{$push:"$array1.array2"}
}
},
{
"$group": {
"_id": {"obj_id": "$_id.obj_id"},
"array1":{"$push":{"id":"$_id.arr1_id", "array2": "$array2"}}
}
}
])
为了修改多个嵌套数组,其中一种方法是
$unwind
它们,根据需要修改数据,并最终聚合未打算的数据
db.collection.aggregate([
{"$unwind":"$array1"},
{"$unwind":"$array1.array2"},
{"$project":{
_id:1,
"array1.id":1,
"array1.array2.id":1,
"array1.array2.string":{"$concat":["$array1.array2.string","world"]}
}
},
{
"$group": {
"_id": {"obj_id": "$_id", "arr1_id": "$array1.id"},
"array2":{$push:"$array1.array2"}
}
},
{
"$group": {
"_id": {"obj_id": "$_id.obj_id"},
"array1":{"$push":{"id":"$_id.arr1_id", "array2": "$array2"}}
}
}
])
添加一些样本数据和预期的输出。上面的一个足以理解结构吗?添加一些样本数据和预期的输出。上面的一个足以理解结构吗?这可能不是很有效,但它可以完成工作。谢谢这可能不是很有效,但它确实起到了作用。谢谢