Python-Pymongo : invalidDocument on key <bson.ObjectId>



我当前正在尝试在字符串中构建查询,然后使用evalast_eval)将其转换为dict,以便将其转换为Pymongo更新。

for item in default_properties:
    query = '{"_id": {ObjectId:"%s"}}' % (oid)
if (doc["diff_id"] == diff_id):
                default_val_pos = [line[0], line[1],line[2],line[3],line[4],line[5],line[6],line[7],line[8]]
                update_val = '{ "$set":{"properties.%s": default_val_pos[%d] } }' % (item,idx)
                db.routes.update(eval(query), eval(update_val))

我认为现在应该还可以,因为在Mongoshell本身中接受相同的查询,唯一的区别是我使用from bson.objectid import ObjectId将其格式化好,但是发生了此错误:

InvalidDocument: documents must have only string keys, key was <class 'bson.objectid.ObjectId'>

据我所知,除了objectId和hmmm之外,我没有任何"字段键",我认为我不应该将objectid在硬编码的字符串中旋转。所以我想知道是否有人可以解释问题是什么?

谢谢!

应该只是:

query = '{"_id": ObjectId("%s")}' % (oid)

您正在与MongoDB扩展JSON感到困惑,您可以像以下方式评估:

query = '{"_id": {"$oid": "%s"}}' % (oid)
from bson import json_util
query_dict = json_util.loads(query)

但是,构建查询的最简单方法是使用Python文字:

query_dict = {"_id": ObjectId(oid)}