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.