Python 使用mongoengine从dict中的列表中提取
我在mongo engine中有此文档:Python 使用mongoengine从dict中的列表中提取,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,我在mongo engine中有此文档: class Mydoc(db.Document): x = db.DictField() item_number = IntField() Mydoc.objects(item_number=1).update_one(pull__x__mongo={'list': 'lista'}) 我把这些数据放进了文件里 { "_id" : ObjectId("55e360cce725070909af4953"), "x" :
class Mydoc(db.Document):
x = db.DictField()
item_number = IntField()
Mydoc.objects(item_number=1).update_one(pull__x__mongo={'list': 'lista'})
我把这些数据放进了文件里
{
"_id" : ObjectId("55e360cce725070909af4953"),
"x" : {
"mongo" : [
{
"list" : "lista"
},
{
"list" : "listb"
}
],
"hello" : "world"
},
"item_number" : 1
}
好的,如果我想使用mongoengine推送到mongo列表,我会这样做:
Mydoc.objects(item_number=1).update_one(push__x__mongo={"list" : "listc"})
如果再次查询数据库,我会得到这个
{
"_id" : ObjectId("55e360cce725070909af4953"),
"x" : {
"mongo" : [
{
"list" : "lista"
},
{
"list" : "listb"
},
{
"list" : "listc"
}
],
"hello" : "world"
},
"item_number" : 1
}
但当我尝试使用pull-in mongo引擎从同一列表中提取时:
class Mydoc(db.Document):
x = db.DictField()
item_number = IntField()
Mydoc.objects(item_number=1).update_one(pull__x__mongo={'list': 'lista'})
我得到这个错误:
mongoengine.errors.OperationError:更新失败(无法应用$pull
设置为非数组值)
比较句子:
Mydoc.objects(item_number=1).update_one(push__x__mongo={"list" : "listc"}) # Works
Mydoc.objects(item_number=1).update_one(pull__x__mongo={"list" : "listc"}) # Error
我如何从这个列表中提取
非常感谢您的帮助我认为问题在于mongoengine不知道您的
x
文档的结构。您将其声明为DictField
,因此mongoengine认为您是从DictField
而不是从ListField
提取的。将x
声明为ListField
,两个查询应该都可以正常工作
我建议您也为此创建一个问题:作为解决方法,您可以使用原始查询:
Mydoc.objects(item_number=1).update_one(__raw__={'$pull': {'x.mongo': {'list': 'listc'}}})
谢谢,raw工作得很好,使用mongodb语法也更好。