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小时内都找不到解决方案!棒极了,伙计!