MongoDB,有没有一种方法可以在更新文档之前添加新字段?

时间:2015-11-25 00:06:58

标签: node.js mongodb mongodb-query

我是mongodb的新手,关于更新文档,我问mongo上是否有方法在现有字段之前或之后添加新字段,这里有一个简单的例子:

{"_id":'a1', name: 'joe doe', age: 32 }

在本文档中,我想通过在年龄字段之前设置一个电子邮件字段进行更新,如下所示:

{"_id":'a1', name: 'joe doe', email: 'joedoe@test.test', age: 32 }

3 个答案:

答案 0 :(得分:0)

您可以使用.update()方法和$set运算符。

db.collection.update({/*your filter*/}, { '$set': { 'email': 'joedoe@test.test' } } )

这不会对您的字段重新排序"电子邮件"领域将在"年龄"之后因为如documentation中所述:

  

从版本2.6开始,MongoDB会主动尝试保留文档中的字段顺序。在2.6版之前,MongoDB没有主动保留文档中字段的顺序。

所以您新更新的文档将如下所示:

{ "_id" : "a1", "name" : "joe doe", "age" : 32, "email" : "joedoe@test.test" }

答案 1 :(得分:0)

它是一个对象,所以顺序无关紧要。如果您想保留特定订单,则应使用数组,即



{"_id":'a1', data : [{name: 'joe doe'}, {age: 32}] }




然后您可以使用$push运算符并在数组中指定其$position



db.collection.update({"_id":"a1"}, {
  $push: {
    data: {
       $each: [ {"email":"joedoe@test.test"} ],
       $position: 1
    }
  }
});




这将导致文档在其"数据"中的位置编号1上具有对象{email:' joedoe@test.test}。阵列:



{"_id":'a1', data : [{name: 'joe doe'}, {email: 'joedoe@test.test'}, {age: 32}] }




答案 2 :(得分:0)

如果您想要发布此类订单,则需要存储db.collection.find(...)的值并使用

db.collection.update({ filter }, {name: stored.name, email: 'joedoe@test.test', age: stored.age })