Update one field on nested array document

随声附和 提交于 2021-02-11 13:35:50

问题


Let say i have a schema like this:

{ 
    "_id" : ObjectId("5f0c64e4dd0a36b93c7deafa"), 
    "name" : "Asd", 
    "email" : "asd@asd.com", 
    "created_at" : ISODate("2020-07-13T20:43:00.871+0000"), 
    "updated_at" : ISODate("2020-07-13T23:08:26.149+0000"), 
    "family_members" : [
        
    ], 
    "rooms" : [
        {
            "_id" : ObjectId("5f0c98826f0321f6986755da"), 
            "name" : "Ruang Makan", 
            "created_at" : ISODate("2020-07-14T00:23:14.839+0000"), 
            "updated_at" : ISODate("2020-07-14T00:23:14.840+0000"), 
            "devices" : [

            ]
        }, 
        {
            "_id" : ObjectId("5f0c98876f0321f6986755dd"), 
            "name" : "Ruang Tamu", 
            "created_at" : ISODate("2020-07-14T00:23:19.693+0000"), 
            "updated_at" : ISODate("2020-07-14T19:00:08.281+0000"), 
            "devices" : [
                {
                    "serial_number" : "ST9L0CY4A2AVY7HFWWUE", 
                    "used_relay" : NumberInt(0), 
                    "created_at" : ISODate("2020-07-14T16:56:22.156+0000"), 
                    "updated_at" : ISODate("2020-07-14T16:56:22.156+0000"), 
                    "sensors" : [
                       {
                            "_id" : ObjectId("5f0db478ca203bde99d2438e"), 
                            "name" : "Temperature", 
                            "value" : null, 
                            "created_at" : ISODate("2020-07-14T20:34:48.134+0000"), 
                            "updated_at" : ISODate("2020-07-14T20:34:48.134+0000")
                        }, 
                        {
                            "_id" : ObjectId("5f0dbe0563ccbcb2a2aecc04"), 
                            "name" : "Motion", 
                            "value" : null, 
                            "created_at" : ISODate("2020-07-14T21:15:33.135+0000"), 
                            "updated_at" : ISODate("2020-07-14T21:15:33.135+0000")
                        }, 
                        {
                            "_id" : ObjectId("5f0dc0412022e93af338316f"), 
                            "name" : "Humidity", 
                            "value" : null, 
                            "created_at" : ISODate("2020-07-14T21:25:05.126+0000"), 
                            "updated_at" : ISODate("2020-07-14T21:25:05.126+0000")
                        }, 
                        {
                            "_id" : ObjectId("5f0dc0442022e93af3383170"), 
                            "name" : "Light", 
                            "value" : null, 
                            "created_at" : ISODate("2020-07-14T21:25:08.451+0000"), 
                            "updated_at" : ISODate("2020-07-14T21:25:08.451+0000")
                        }
                    ], 
                    "switches" : [

                    ]
                }
            ]
        }
    ]
}

I want to update the value field inside sensors array with this query:

db.users.updateOne(
    {
        '_id': ObjectId("5f0c64e4dd0a36b93c7deafa"), 
        "rooms.devices.sensors._id": ObjectId("5f0db478ca203bde99d2438e"), 
    }, 
    {$set: {'rooms.$[].devices.$[].sensors.$.value': 21.0}}
)

But the result only updated the last index of array, which its name is "Light". It supposed to be "Temperature" consider the given _id is for Temperature document. How to update only one document?

来源:https://stackoverflow.com/questions/62919276/update-one-field-on-nested-array-document

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!