我正在尝试将新字段插入对象数组
{
"_id": "543356fe0c9af6066e68970c",
"createdDate": "2014-10-06 07:59 pm",
"cancle": false,
"eventDate": "2014/12/12",
"eventstatus": true,
"location": "chennai",
"userId": "54310801e2659ecc3650100b",
"createdBy": "one",
"eventName": "tea ",
"__v": 0,
"friends": [
{
"userId": "54310814e2659ecc3650100c",
"userName": "two",
"phoneNumber": "22222222"
},
{
"userId": "54310945e2659ecc3650100d",
"userName": "three",
"phoneNumber": "33333333"
},
{
"userId": "54334def7e85de48638d1069",
"userName": "four",
"phoneNumber": "44444444"
}
]
}
我想将“status”:0添加到friends数组中的所有对象
我尝试使用addtoset,push和多种方式,将其添加为friends数组中的新对象。
db.events.update({},{$push:{ "friends" : {"status" : 0} }},false,true)
db.events.update({},{$addToSet : {'friends' : $each: [{ 'status':0}]}},false,true)
请让我知道我做错了什么。 谢谢你的帮助
答案 0 :(得分:6)
您可以使用它来更新数组
db.events.find().forEach(function(e){
var t=e.friends;
t.forEach(function(e){
e.status=0
});
db.events.update({_id:e._id},{$set:{friends:t}})
})
在你的mongo终端中运行它。
答案 1 :(得分:1)
不知道代码的问题,但我有正确的代码
var cursor = db.events.find();
cursor.forEach(function(item)
{
var friends = item.friends;
friends.forEach(function(elem)
{
elem['status'] = '....',
})
db.events.update({_id: item._id}, item);
});
它正在使用mongo shell,但我不了解javascript
答案 2 :(得分:0)
在Java和Springs MongoTemplate中,您可以使用以下命令向数组中的所有条目添加新字段:
final Query query = new Query(Criteria.where("states.$[].date").exists(false));
final Update update = new Update().set("states.$[].stateSetBy", "SYSTEM");
mongoTemplate.updateMulti(query, update, "<collection_name>");
在这个示例中,您有一个包含&#34;状态&#34;的数组的文档。并希望为此数组的每个条目添加一个新字段。
最重要的部分是$ []来解决数组中的每个条目
请参阅:https://docs.mongodb.com/manual/reference/operator/update-array/
答案 3 :(得分:-1)
需要在启动时添加多个true和调用函数
db.events.update({},{$push:{ "friends" : {"status" : 0} }},{ multi: true },function(e,update){});