Я пытаюсь добавить больше массивов в существующий массив.
В настоящее время это выглядит так:
"lastmsg" : ISODate("2020-01-27T07:23:03.601Z"),
"_force_collection" : false,
"metadata" : {
"cwmpid" : "1804289383",
"current_time" : "2020-01-27T08:23:02+00:00",
"DSLInterface_parameter" : "WANDevice.1.",
У меня есть python скрипт, который использует update_one и $ set, но удаляет существующие данные в метаданных и добавляет то, что мне нужно, но я хочу сохранить уже существующие метаданные и добавить новые поля без перезаписи существующих данных.
Вот фрагмент кода сценария python:
dict = {
"metadata": {
"loc": {
"mark": row["metadata.loc.geo.bs.mark"],
"dslam": {
"locname": row["metadata.loc.geo.dslam.locname"],
"mark": row["metadata.loc.geo.dslam.mark"],
"devname": row["metadata.loc.geo.dslam.devname"],
},
"geo": {
"coordinates": [
float(
row["metadata.loc.geo.coordinates.longitude"]
),
float(row["metadata.loc.geo.coordinates.latitude"]),
],
"type": row["metadata.loc.geo.type"],
},
}
}
}
criteria = {"cpeid": cpeid}
res = mycol.update_one(criteria, {"$set": dict})
После запуска он перезаписывает существующие данные, поэтому новый вывод выглядит так:
"metadata" : {
"loc" : {
"geo" : {
"type" : "Point",
"coordinates" : [
16.4665492,
43.5076267
]
},
"dslam" : {
"locname" : "",
"devname" : "",
"mark" : "0"
},
"mark" : ""
}
}
}
Я пытаюсь получить следующее:
"lastmsg" : ISODate("2020-01-27T07:23:03.601Z"),
"_force_collection" : false,
"metadata" : {
"cwmpid" : "1804289383",
"current_time" : "2020-01-27T08:23:02+00:00",
"DSLInterface_parameter" : "WANDevice.1.",
"loc" : {
"geo" : {
"type" : "Point",
"coordinates" : [
16.4665492,
43.5076267
]
},
"dslam" : {
"locname" : "",
"devname" : "",
"mark" : "0"
},
"mark" : ""
}
}
}
@ whoami решение сработало, мне пришлось немного отредактировать решение для этого: {"$ set": {"metadata.lo c": dict}}
и удалить метаданные и lo c из dict!