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()
的第二个参数中传递数组而不是对象?
为什么我们不能用普通对象做到这一点?
答案 0 :(得分:0)
这是因为启动 MongoDB 4.2 update
命令在其更新参数中支持很少的聚合管道。
您可以在 this link 上了解有关此功能和支持的管道的更多信息。
总而言之,如果您使用的是定期更新,则将使用 Object
。如果你是
使用聚合命令,Array
将被使用,因为您正在传递管道
在更新参数中。
旧版 MongoDB 更新命令没有自引用其他键的选项。
但在 MongoDB 聚合的 $set
管道阶段是可能的。
这就是为什么在您使用的更新查询中,使用了 $set
聚合管道
它支持使用 $
引用其他键。
注意:MongoDB 版本 > 4.2 支持在 MongoDB 更新参数中使用聚合管道