Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用MongoDB,如何根据匹配从列表中删除嵌入的文档_Python_Mongodb_Mongoengine - Fatal编程技术网

Python 使用MongoDB,如何根据匹配从列表中删除嵌入的文档

Python 使用MongoDB,如何根据匹配从列表中删除嵌入的文档,python,mongodb,mongoengine,Python,Mongodb,Mongoengine,我有一个文档和一个使用MongoEngine的嵌入式文档 class Sub(EmbeddedDocument): Id = StringField() User = StringField() Value = StringField() class Main(Document): Value = StringField Values = ListField(EmbeddedDocumentField(Sub)) 当我将新的嵌入文档添加到Main的“

我有一个文档和一个使用MongoEngine的嵌入式文档

class Sub(EmbeddedDocument):
    Id = StringField()
    User = StringField()
    Value = StringField()


class Main(Document):
    Value = StringField
    Values = ListField(EmbeddedDocumentField(Sub))
当我将新的嵌入文档添加到Main的“值”字段中时,我会为列表生成一个唯一的id,而不是集合,Main的“值”中可能有多个Sub,每个Sub来自不同的用户,我试图让MongoEngine根据id和用户自动从列表中删除一个“Sub”值

我已经试着为主设备运行一个select,然后为子设备本身运行一个update

Main.objects(id=main_id).update_one(pull__values__id=sub_id) 

但所有这些似乎都返回了数组内部的索引。我知道我可以简单地提取Main,然后遍历值,找到元素并将其删除,但我正在尝试保留这个原子,并且在提取、迭代和更新过程中不太可能向sub添加任何内容。

只需使用EmbeddedDocument类传递
sub\u id

Main.objects(id=main_id).update_one(pull__values__id = Sub(Id=sub_id).Id )

我必须在sub的末尾添加
.id
,以使其正常工作:
Main.objects(id=Main\u id).update\u one(pull\u values\u id=sub(id=sub\u id).id)
@joeh对我来说是一样的-我根据你的评论编辑了答案