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"}}
 }
}

])

添加一些样本数据和预期的输出。上面的一个足以理解结构吗?添加一些样本数据和预期的输出。上面的一个足以理解结构吗?这可能不是很有效,但它可以完成工作。谢谢这可能不是很有效,但它确实起到了作用。谢谢