MongoEngine 删除文档

Jiv*_*van 5 python mongodb mongoengine

我有以下 MongoEngine 文档

{
    '_id': 'some_id',
    'data': 'some_data'
}
Run Code Online (Sandbox Code Playgroud)

如何delete使用 MongoEngine 编写此文档?

我试过的:

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
Run Code Online (Sandbox Code Playgroud)

--注意

奇怪的是,以下工作完美:

my_collection.MyCol.objects.delete()
# delete all documents in the collection
Run Code Online (Sandbox Code Playgroud)

但是我已经关注了MongoEngine文档,但仍然无法仅删除一个特定的文档

kni*_*dan 5

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

obj = my_collection.MyCol.objects.get(id='some_id')
Run Code Online (Sandbox Code Playgroud)

或者

obj = my_collection.MyCol.objects(id='some_id')
obj.delete()
Run Code Online (Sandbox Code Playgroud)


Jac*_*ing 4

如果您的文档覆盖_id,您必须表明它仍然是主键。更改您的文档类定义:

class MyCol(Document):
    _id = db.StringField()
    ...
Run Code Online (Sandbox Code Playgroud)

指定主键:

class MyCol(Document):
    _id = db.StringField(primary_key=True)
    ...
Run Code Online (Sandbox Code Playgroud)