Python 使用MongoDB,如何根据匹配从列表中删除嵌入的文档
我有一个文档和一个使用MongoEngine的嵌入式文档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的“
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对我来说是一样的-我根据你的评论编辑了答案