MongoEngine原始查询未解决

时间:2019-07-25 11:55:32

标签: python mongodb mongoengine

Mongo引擎无法执行原始查询

AppDocument.objects(__raw__={
{"_id": ObjectId("1"),"car._id": ObjectId("2")}, 
            {"$pull": 
                {"car.$.toys": {"_id": ObjectId("3")}}
            }
}

错误是:

  

TypeError:不可散列的类型:'dict'

1 个答案:

答案 0 :(得分:0)

.objects()仅用于查询,不用于更新。因此,__raw__仅允许您强制查询的filter部分,而不是update部分。

使用mongoengine的方式:

find_qry = {"_id": ObjectId("1"),"car._id": ObjectId("2")}
update_qry = {"$pull": {"car.$.toys": {"_id": ObjectId("3")}}}
AppDocument.objects(__raw__=find_qry).update(__raw__=update_qry)

或者,请注意,您始终可以访问底层的pymongo集合

coll = AppDocument._get_collection()
coll.update(find_qry, update_query)