Update array object based on id?

前端 未结 2 1078
有刺的猬
有刺的猬 2020-12-11 09:17

I\'m having a bit of a mongo issue. I was wondering if there was a way to do the following in a mongo console command rather then multiple find and update

相关标签:
2条回答
  • 2020-12-11 09:51

    You can use the $ positional operator to do this:

    db.soup.update(
        {_id: ObjectId("50b429ba0e27b508d854483e"), 'array.id': '2'}, 
        {$set: {'array.$.letter': 'c'}})
    

    The $ in the update object acts as a placeholder for the first element of array to match the query selector.

    0 讨论(0)
  • 2020-12-11 10:04

    Here you go:

    > db.collection.insert( { array : [ { id : 1, letter : 'a' }, { id : 2, letter : 'b' } ], tester : 'tom' } );
    > db.collection.findOne();
    {
        "_id" : ObjectId("50b431a69a0358d590a2f5f0"),
        "array" : [
            {
                "id" : 1,
                "letter" : "a"
            },
            {
                "id" : 2,
                "letter" : "b"
            }
        ],
        "tester" : "tom"
    }
    > db.collection.update( { tester : 'tom' }, { $set : { 'array.1' : { id : 2, letter : 'c' } } }, false, true );
    > db.collection.findOne();
    {
        "_id" : ObjectId("50b431a69a0358d590a2f5f0"),
        "array" : [
            {
                "id" : 1,
                "letter" : "a"
            },
            {
                "id" : 2,
                "letter" : "c"
            }
        ],
        "tester" : "tom"
    }
    

    The trick lies in the false, true, false. That is: true for upsert, false for update multiple.

    For more details check out: http://www.mongodb.org/display/DOCS/Updating#Updating-update%28%29

    0 讨论(0)
提交回复
热议问题