MongoDB如何用一个字段更新另一个字段?

How to use a field to update another field in MongoDB?

这是一个文档示例:

{
  _id: ObjectId("740b850f0406011059002b14"),
  product_id: 10,
  product_state: "available",
  old_state: null,
  ...
};

我正在尝试进行更新,我将状态值存储在名为 'old_state' 的字段中,并将新值放入 'product_state' 字段中。 我想将此操作应用于多个文档。 那么,我怎样才能设法进行这个操作呢? 结果应该是这样的:

{
  _id: ObjectId("740b850f0406011059002b14"),
  product_id: 10,
  product_state: "outOfStock",
  old_state: "available",
  ...
};

您只需将带有 $ 前缀的密钥名称引用到您要使用

更新的新密钥

Note: This will work on MongoDB version >= 4.2

db.collection.update({
  product_id: 10,
}, [
{
  "$set": {
    "product_state": "outOfStock",
    "old_state": "$product_state"  // <-- Updates `old_state` key with the current value in `product_state` key
  }
}
])

Notice the $ prefix in product_state and the update block is enclosed in []

这会将 product_state 键的当前值更新为 old_state

Mongo Playground Sample Execution

您需要使用更新的数组形式 $update:

c = db.foo.update({_id:0}, [ {$addFields: {product_state: "new", os: "$product_state"}} ]);