【问题标题】:Using MongoDB Update upsert使用 MongoDB 更新 upsert
【发布时间】:2013-06-05 19:49:42
【问题描述】:

有大约 5 个更新运算符:$inc、$rename、$setOnInsert、$set 和 $unset

在将 upsert 选项设置为 true 的情况下进行更新时,对于具有此更新查询的字段,新创建的文档的值是多少(考虑到它不存在,因此对其进行更新):

{$inc: {age: 1}}

所以新插入的文档的值为 1?因为它以前不存在。我对吗?

如果运算符是$rename,那么字段null 的值是多少?或者该字段不会被创建为要插入的新文档的一部分?

更新:

如果更新查询是重命名更新:

db.students.update( { _id: 1 }, { $rename: { 'nickname': 'alias', 'cell': 'mobile' } } )

【问题讨论】:

  • 1. doc 说:“如果该字段不存在,则 $inc 将该字段设置为指定的数量。”所以你是对的/我没有得到重命名的东西,你能更详细地解释一下吗?
  • 查看我更新的问题
  • 没有用于重命名查询的 upsert?对吗?

标签: mongodb


【解决方案1】:

我在 RockMongo 中执行了以下步骤,应该可以回答您关于 $rename 的问题:

  1. 在新的数据库/集合中,插入一个文档 {"a": 1}
  2. 用 "$rename": {"b": "c"} 更新它
  3. 上面写着“1 行可能会受到影响。”
  4. 回到集合,仍然只有一个数据:{"a": 1}(_id 省略)。所以是的,它什么都不做。

你可以自己试试:)

【讨论】:

    【解决方案2】:

    来自docs

    当重命名单个字段并且现有字段名称引用 不存在的字段,$rename 运算符什么也不做。

    重命名多个字段时,所有旧字段名称均指 不存在的字段,$rename 运算符什么也不做。

    重命名多个字段和一些但不是所有旧字段名称时 引用不存在的字段,$rename 运算符执行 以下操作:

    • 将存在的字段重命名为指定的新字段名称。
    • 忽略不存在的字段。

    【讨论】:

      猜你喜欢
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多