将阵列添加到现有阵列Mongo

时间:2020-03-10 14:16:10

标签: 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_parameter" : "WANDevice.1.",

我有使用update_one和$ set的python脚本,但是该脚本删除了元数据中的现有数据并添加了我需要的内容,但是我想保留现有的元数据并添加新文件而不覆盖现有数据。

这是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.loc”:dict}}

并从dict中删除元数据和loc!

0 个答案:

没有答案
相关问题