首页 > 解决方案 > MongoDB:使用更新方法添加数组的新元素不起作用

问题描述

我使用mongodb的udpate方法来改变一个数组的元素,我希望添加一个新元素,但是它改变了第一个而不是添加一个新的。但是,如果我使用 updateOne 就可以了。这是更新的错误,或者我犯了一个错误。谢谢你的帮助!我所做的如下。

1.db.test.insertOne({a:[{b:1,c:2}]});

2.db.test.find({}) returns:
{ 
    "_id" : ObjectId("5fc593001b800790b21afa62"), 
    "a" : [
        {
            "b" : 1.0, 
            "c" : 2.0
        }
    ]
}

3. db.test.update({_id:ObjectId("5fc593001b800790b21afa62")}, 
[{
    $set:
    {"a.1": 
        {a:3, b:30}
    }
 }])
4)db.test.find({}) returns: 
{ 
    "_id" : ObjectId("5fc593001b800790b21afa62"), 
    "a" : [
        {
            "b" : 1.0, 
            "c" : 2.0, 
            "1" : {
                "a" : 3.0, 
                "b" : 30.0
            }
        }
    ]
}
It seems wrong, and it should be like { 
    "_id" : ObjectId("5fc593001b800790b21afa62"), 
    "a" : [
        {
            "b" : 1.0, 
            "c" : 2.0
        },
        {
            "a" : 3.0, 
          "b" : 30.0
        }
    ]
}, do I make a mistake? However, if I use updateOne, it works.
5) Instead of update method, execute:
db.test.updateOne({_id:ObjectId("5fc593001b800790b21afa62")}, 
{
    $set:
    {"a.1": 
        {a:3, b:30}
    }
 })
6) db.test.find({}) returns: 
{ 
    "_id" : ObjectId("5fc593001b800790b21afa62"), 
    "a" : [
        {
            "b" : 1.0, 
            "c" : 2.0
        }, 
        {
            "a" : 3.0, 
            "b" : 30.0
        }
    ]
}
It's what I want. 

我认为他们应该做同样的事情,我误解了吗?我该怎么做才能让它发挥作用?非常感谢!

标签: mongodb

解决方案


推荐阅读