【问题标题】:MongoDB: Update field using value from another fieldMongoDB:使用来自另一个字段的值更新字段
【发布时间】:2020-06-12 17:05:01
【问题描述】:

使用 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' 出于某种原因被解释为文字。

【问题讨论】:

  • @whoami:理论上确实如此。这正是我尝试过的,但是我的 Mongo shell 会将“$a”解释为字符串 '$a' 而不是 2,即键为 'a' 的字段的值。
  • S :您尝试的内容与必须完成的内容有所不同,.update() 应该在聚合管道中 :: [ ] 不是作为对象!你的 MongoDB 版本是多少?
  • @whoami:我还尝试将更新放在方括号中。不幸的是同样的问题。 MongoDB服务器版本:4.0.16
  • @whoami:感谢您的指出!我将采用读和写回方法,但感谢您提供查询。

标签: mongodb mongodb-query


【解决方案1】:

试试这个 sn-p:

db.<collection>.update({}, [{$set: {'foo_new': '$foo'}}], {"multi": true})

注意第二个参数中的[] 方括号。 更多信息:https://stackoverflow.com/a/37280419/4050261

【讨论】:

  • 如果我们创建了一个新文档,我们是否可以让新字段自动填充此值。有没有办法做到这一点?我基本上会根据其他两个领域进行计算。如果我们添加新文档,计算是否会反映新字段?
猜你喜欢
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多