Mongo обновляет массив вложенных dict в Django

Я пытаюсь обновить данные, но сталкиваюсь с проблемой, потому что это вложенная форма

Что мне нужно сделать, чтобы иметь возможность просматривать таблицу книг в mysql?

существующая структура данных выглядит следующим образом

{
   "created_by_id":122,
   "updated_by_id":123,
   "farm_area": [
        {
            "area_id": 1,
            "area_name": "Area 1",
            "area_acerage": 4,
            "zone_latest_id": 1,
            "zone_name": "test zone",
            "zone_acerage": 2,
            "area_zone":[
                         {
                               "zone_acerage":0.3
                         }
                        ]
            "device_info":[
                           {   "device_id":232,
                               "device_type":"sensor"
                           }
                          ]
                            
        },
        {
            "area_id": 2,
            "area_name": "Area 2",
            "area_acerage": 4,
            "area_structure_type": "polyhouse"
        }
    ]
}

и я пробую эти существующие данные, посылая новые данные, которые

{
   "created_by_id":122,
   "updated_by_id":123,
   "farm_area": [
        {
            "area_id": 1,
            "area_name": "Area 1",
            "area_acerage": 4,
            "zone_latest_id": 1,
            "zone_name": "test zone",
            "zone_acerage": 2,
            "area_zone":[
                         {
                               "zone_acerage":0.3
                         }
                        ]
            "device_info":[
                           {   "device_id":232,
                               "device_type":"sensor"
                           }
                          ]
                            
        },
        {
            "area_id": 2,
            "area_name": "Area 2",
            "area_acerage": 4,
            "area_structure_type": "polyhouse",
            "area_zone":[
                         {
                               "zone_acerage":0.3,
                                "zone_name":"Test Zone"
                         }
                        ]
            "device_info":[
                           {   "device_id":232,
                               "device_type":"sensor"
                           }
                          ]
        }
    ]
}

Но каждый раз, когда я запускаю эту команду

collection.update_one({"_id": ObjectId(str(kwargs['pk']))}, {"$set": request.data}, upsert=True)

Данные заменяются новыми, и из-за этого я теряю некоторые столбцы из базы данных. Но я ищу выход в котором они оба объединяются так, чтобы я не потерял ни одного столбца и структура осталась прежней

Я могу помочь, я использую Django и MongoDB

Вот один из способов update использовать "arrayFilters".

N.B.: Вы можете заменить "_id" и новые данные программно.

db.collection.update({
  "_id": ObjectId("5a934e000102030405000000")
},
{
  "$set": {
    "farm_area.$[elem].area_zone": [
      {
        "zone_acerage": 0.3,
        "zone_name": "Test Zone"
      }
    ],
    "farm_area.$[elem].device_info": [
      {
        "device_id": 232,
        "device_type": "sensor"
      }
    ]
  }
},
{
  "arrayFilters": [
    {
      "elem.area_id": 2
    }
  ]
})

Попробуйте на mongoplayground.net.

Вернуться на верх