使用文档中其他字段的值修改字段

时间:2021-05-02 06:38:00

标签: mongodb

初始数据

db.members.insertMany([
   { "_id" : 1, "member" : "abc123", "status" : "A", "points" : 2, "misc1" : "note to self: confirm status", "misc2" : "Need to activate", "lastUpdate" : ISODate("2019-01-01T00:00:00Z") },
   { "_id" : 2, "member" : "xyz123", "status" : "A", "points" : 60, "misc1" : "reminder: ping me at 100pts", "misc2" : "Some random comment", "lastUpdate" : ISODate("2019-01-01T00:00:00Z") }
])

更新查询

db.members.update(
   { },
   [
      { $set: { status: "Modified", comments: [ "$misc1", "$misc2" ], lastUpdate: "$$NOW" } },
      { $unset: [ "misc1", "misc2" ] }
   ],
   { multi: true }
)

上述查询工作正常,我想知道为什么我们在 .update() 的第二个参数中传递数组而不是对象?

为什么我们不能用普通对象做到这一点?

1 个答案:

答案 0 :(得分:0)

这是因为启动 MongoDB 4.2 update 命令在其更新参数中支持很少的聚合管道。

您可以在 this link 上了解有关此功能和支持的管道的更多信息。

总而言之,如果您使用的是定期更新,则将使用 Object。如果你是 使用聚合命令,Array 将被使用,因为您正在传递管道 在更新参数中。

旧版 MongoDB 更新命令没有自引用其他键的选项。 但在 MongoDB 聚合的 $set 管道阶段是可能的。 这就是为什么在您使用的更新查询中,使用了 $set 聚合管道 它支持使用 $ 引用其他键。

<块引用>

注意:MongoDB 版本 > 4.2 支持在 MongoDB 更新参数中使用聚合管道