我是mongodb的新手,关于更新文档,我问mongo上是否有方法在现有字段之前或之后添加新字段,这里有一个简单的例子:
{"_id":'a1', name: 'joe doe', age: 32 }
在本文档中,我想通过在年龄字段之前设置一个电子邮件字段进行更新,如下所示:
{"_id":'a1', name: 'joe doe', email: 'joedoe@test.test', age: 32 }
答案 0 :(得分:0)
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 })