MongoEngine删除文件

时间:2016-05-26 16:19:18

标签: python mongodb mongoengine

我有以下MongoEngine文档

{
    '_id': 'some_id',
    'data': 'some_data'
}

我如何使用MongoEngine delete本文档?

我尝试了什么:

import my_collection

obj = my_collection.MyCol.objects.get(_id='some_id')
# obj is correctly found - let's continue

obj.delete()
# mongoengine.errors.ValidationError: 'None' is not a valid ObjectId

obj.delete('some_id')
# TypeError: delete() takes 1 positional argument but 2 were given

obj.delete(_id='some_id')
# mongoengine.errors.ValidationError: 'None' is not a valid ObjectId

- 注意

奇怪的是,以下情况完美无缺:

my_collection.MyCol.objects.delete()
# delete all documents in the collection

但我已关注MongoEngine个文档,仍然无法删除一个特定文档

5 个答案:

答案 0 :(得分:3)

如果您的文档覆盖_id,则必须指明它仍然是主键。从以下位置更改文档类定义:

class MyCol(Document):
    _id = db.StringField()
    ...

指定主键:

class MyCol(Document):
    _id = db.StringField(primary_key=True)
    ...

答案 1 :(得分:2)

根据我的理解并根据note in the docs

  

请注意,这仅在文档存在于数据库中且具有有效ID

时才有效
仅当对象ID(obj.delete()属性 - 具有有效obj.id值时,

ObjectId才有效。在您的情况下,您没有定义obj.id,请使用objects.delete()语法:

my_collection.MyCol.objects.delete()

答案 2 :(得分:2)

在引用mongoengine ObjecIds时,你不要使用下划线。

obj = my_collection.MyCol.objects.get(id='some_id')

obj = my_collection.MyCol.objects(id='some_id')
obj.delete()

答案 3 :(得分:2)

您可以使用以下命令删除一个特定文档

my_collection.MyCol.objects(id='some_id').delete()

答案 4 :(得分:0)

my_collection.MyCol.objects(id ='some_id')。delete()