我正在使用Mongo shell,尝试为集合中的所有文档添加一个与现有字段相同值的字段。假设我们有两个文档:
{
'foo': 'str1'
}
并且
{
'foo': 'str2'
}
我想插入一个新的字段
'foo_new'
,并将其值设置为'foo'
的值,使文档变成:{
'foo': 'str1'
'foo_new': 'str1'
}
并且
{
'foo': 'str2'
'foo_new': 'str2'
}
我使用的命令在Mongo shell中更新集合(例如'coll')的语法如下:
db.coll.update({}, {$set: {'foo_new': '$foo'}}, {multi: true})
运行此命令后,会得到两个更新后的文档。
{
'foo': 'str1'
'foo_new': '$foo'
}
并且
{
'foo': 'str2'
'foo_new': '$foo'
}
即 '$foo'
由于某些原因被解释为字面量。
.update()
应该在聚合管道中 ::[ ]
而不是作为一个对象!你的 MongoDB 版本是多少? - whoami - fakeFaceTrueSoul.updates()
中仅适用于MongoDB v> = 4.2,正如答案中所述。如果使用低于该版本的版本,则需要先读取数据,然后再写回数据库。或者使用聚合管道来完全创建具有所需数据的不同集合,并删除现有的集合。如果您可以接受这一点,我可以提供一个查询。 - whoami - fakeFaceTrueSoul