Arrays MongoDB。如何在数组中将字段从一个子文档移动到另一个子文档?

Arrays MongoDB。如何在数组中将字段从一个子文档移动到另一个子文档?,arrays,mongodb,pymongo-3.x,Arrays,Mongodb,Pymongo 3.x,我有一个这样的收藏 { "key_a": 1, "key_b": [ {"name": "pepe"}, {"name": "juan", "code": 12345}, {"name": "luis", "code": 5678

我有一个这样的收藏

{ "key_a": 1,
  "key_b": [
           {"name": "pepe"},
           {"name": "juan", "code": 12345},
           {"name": "luis", "code": 5678}
          ]
}
“key_b”是一个文档数组。我想找到包含“pepe”和“juan”的文档,然后将“code”从“juan”移动到“pepe”。结果将是:

{ "key_a": 1,
  "key_b": [
           {"name": "pepe", "code": 12345},
           {"name": "juan"},
           {"name": "luis", "code": 5678}
          ]
}

最好的方法是什么?我正在使用pymongo。

我将分两步完成这项工作。它不是严格地移动字段,而是更新两个文档

在MongoDB中,可以使用$unset删除字段:

那么你可以用

findOneAndUpdate({ name: "pepe"}, { "code": newValue }, { upsert: true}).exec()

(示例为mongoose,Pymongo更新语法如下:,不确定Pymongo中的$unset)

您可以使用聚合管道将a字段的值移动到另一个字段,然后执行更新-这是使用4.2之前的MongoDB版本。在版本4.2中,您可以为此操作执行一次操作-这将是一次操作。此解决方案不起作用或不完整。第一步删除“代码”和值。因此,newValue不存在。我想将值从一个文档移动到另一个文档。嘿,胡安,好吧,实际上没有一种简单的方法将值从一个文档移动到另一个文档。由于要删除该字段,您可能需要首先从名为juan的文档中获取值,并将其存储在“newValue”变量中(如何存储临时变量取决于您自己)
findOneAndUpdate({ name: "pepe"}, { "code": newValue }, { upsert: true}).exec()