MongoDB向数组中插入新字段

6

我正在尝试向对象数组中插入一个新字段

{
    "_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"
        }
    ]
}

我想在friends数组中的所有对象中添加"status" : 0。
我尝试使用addtoset、push和多种方式,但它们都会将其作为friends数组中的新对象添加。
db.events.update({},{$push:{ "friends" : {"status" : 0} }},false,true)
db.events.update({},{$addToSet : {'friends' : $each: [{ 'status':0}]}},false,true)

请告诉我我做错了什么。谢谢您的帮助。
5个回答

15
您可以使用此功能来更新数组。
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终端中运行此命令。

现在请使用 updateMany 代替 update - Paulo Guimarães

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。

0

0
在Java和Spring的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>");

在这个例子中,您有一个带有“状态”数组的文档,并希望向该数组的每个条目添加一个新字段。
最重要的部分是$[],用于寻址数组中的每个条目。
请参见:https://docs.mongodb.com/manual/reference/operator/update-array/

-1

需要添加多个true并在上传时调用require函数

db.events.update({},{$push:{ "friends" : {"status" : 0} }},{ multi: true },function(e,update){});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接