Python 将阵列添加到现有阵列Mongo
我正在尝试向现有阵列添加更多阵列 现在是这样的,Python 将阵列添加到现有阵列Mongo,python,arrays,mongodb,field,pymongo,Python,Arrays,Mongodb,Field,Pymongo,我正在尝试向现有阵列添加更多阵列 现在是这样的, "lastmsg" : ISODate("2020-01-27T07:23:03.601Z"), "_force_collection" : false, "metadata" : { "cwmpid" : "1804289383", "current_time" : "2020-01-27T08:23:02+00:00", "DSLInterface_
"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.",
"metadata" : {
"loc" : {
"geo" : {
"type" : "Point",
"coordinates" : [
16.4665492,
43.5076267
]
},
"dslam" : {
"locname" : "",
"devname" : "",
"mark" : "0"
},
"mark" : ""
}
}
我有一个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})
运行后,它将覆盖现有数据,因此新输出如下所示:
"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.",
"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" : ""
}
}
}
@无论解决方案是什么样的,我都必须对解决方案进行一些编辑:
{“$set”:{“metadata.loc”:dict}
并从dict中删除元数据和loc
$set
将用新值替换整个字段,因此您需要使用
添加或更新对象中的字段!!所以你需要做::{$set:{'metadata.loc':dict.metadata.loc}
或者如果元数据
是一个数组,那么你需要使用$push
而不是$set
,这是否回答了你的问题@无论解决方案对我起了什么作用,我都无法表达我是多么感激!我尝试了$addFileds,$push,但没有任何效果,12小时内都找不到解决方案!棒极了,伙计!