如何在MongoEngine中通过id从列表(ListField)中删除项目?

时间:2011-10-21 07:11:44

标签: mongodb mongoengine

结构:

{title: 'test', comments: [{id:1, title: ''}, {id: 8, title: ''}]}

我需要删除id = 8项,谢谢。

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

你需要在这里使用$ pull operator:

http://www.mongodb.org/display/DOCS/Updating#Updating-%24pull

db.collection.update({'title':'test'},{$pull : { 'comments' : { 'id' : 8 }});

答案 2 :(得分:0)

以下是pull运算符的一个示例,使用flask_mongoengine并假设父对象类称为Blog,并且注释是Blog中的EmbeddedDocuments。

Blog.objects(id=blog_id).update_one(pull__comments___id=comment_id)

请注意评论ID中的三重下划线。这是因为如果您想要注释上的主键,则需要在模型声明中添加一个,如下所示:

class Comment(db.EmbeddedDocument):
    _id = db.ObjectIdField(primary_key=True, default=lambda: ObjectId())
    ...

lamba函数将为您生成主键。