3

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

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


class Main(Document):
    Value = StringField
    Values = ListField(EmbeddedDocumentField(Sub))

当我将新的嵌入文档添加到 Main 的“值”字段中时,我会为列表生成一个唯一的 id 而不是集合,在 Main 的“值”中可以有多个 Sub,每个来自不同的用户,我试图让 MongoEngine 自动删除列表中的“子”值,基于 ID 和用户。

我试图为 Main 运行一个 select,然后为 Sub 本身运行一个 update_one

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

但这一切似乎返回的是数组内部的索引。我知道我可以简单地拉出 Main,然后通过 Values 找到元素并将其删除,但我试图保持这个原子性,并且在拉取、迭代、更新过程中将某些东西添加到 sub 的机会更少。

4

1 回答 1

6

只需使用 EmbeddedDocument 类即可通过sub_id

Main.objects(id=main_id).update_one(pull__values__id = Sub(Id=sub_id).Id )
于 2012-05-13T00:50:53.887 回答