不允许在\u id上使用Pymongo Mod

2024-06-11 06:06:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Mongo集合需要更新,我正在尝试使用集合.更新命令无效。在

代码如下:

import pymongo
from pymongo import MongoClient
client = MongoClient()
db = client.SensorDB
sensors = db.Sensor

for sensor in sensors.find():
    lat = sensor['location']['latitude']
    lng = sensor['location']['longitude']
    sensor['location'] = {
        "type" : "Feature",
        "geometry" : {
            "type" : "Point",
            "coordinates" : [lat ,lng]
        },
        "properties": {
            "name": sensor['name']
        }
    }

    sensors.update({'webid': sensor['webid']} , {"$set": sensor}, upsert=True)

但是,运行此命令会得到以下结果:

^{pr2}$

Tags: nameimport命令clientdbmongotypelocation
1条回答
网友
1楼 · 发布于 2024-06-11 06:06:27

更改此行:

for sensor in sensors.find():

为此:

^{pr2}$

它的作用是阻止Mongo返回_id字段,因为您没有使用它,并且它会在以后的update()调用中导致问题,因为您无法“更新”_id。在


更好的解决方案(只写需要的数据)

for sensor in sensors.find():
    lat = sensor['location']['latitude']
    lng = sensor['location']['longitude']
    location = {
        "type" : "Feature",
        "geometry" : {
            "type" : "Point",
            "coordinates" : [lat ,lng]
        },
        "properties": {
            "name": sensor['name']
        }
    }

    sensors.update({'webid': sensor['webid']} , {"$set": {'location': location}})

编辑: 正如Loïc Faure Lacroix所提到的,您的案例中也不需要upsert标志—在本例中,您的代码总是在更新,而从不插入。在

编辑2:_id括在第一个解决方案的引号中。在

相关问题 更多 >