使用MongoDB Update upsert

时间:2013-06-10 07:46:44

标签: mongodb

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

当使用设置为true的upsert选项进行更新时,对于具有此更新查询的字段,新创建的文档的值(考虑到它不存在,因此,将其挂起):

{$inc: {age: 1}}

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

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

更新

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

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

2 个答案:

答案 0 :(得分:1)

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

  1. 在新的数据库/集合中,插入文档{“a”:1}
  2. 使用“$ rename”更新它:{“b”:“c”}
  3. 它说“1行可能会受到影响。”
  4. 回到集合,仍然只有一个数据:{“a”:1}(_id省略)。所以是的,它什么也没做。
  5. 您可以自己尝试一下:)

答案 1 :(得分:0)

来自docs

  

重命名单个字段时,现有字段名称引用a   不存在的字段,$rename运算符不执行任何操作。

     

重命名多个字段时,请参阅所有旧字段名称   不存在的字段,$rename运算符不执行任何操作。

     

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

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