首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoEngine删除文档

MongoEngine删除文档
EN

Stack Overflow用户
提问于 2016-05-26 16:19:17
回答 6查看 6.2K关注 0票数 5

我有以下MongoEngine文档

代码语言:javascript
复制
{
    '_id': 'some_id',
    'data': 'some_data'
}

我如何使用delete MongoEngine来实现这个文档呢?

我尝试过的:

代码语言:javascript
复制
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

-注

奇怪的是,以下内容工作得很完美:

代码语言:javascript
复制
my_collection.MyCol.objects.delete()
# delete all documents in the collection

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

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2016-10-15 18:13:37

如果您的文档覆盖_id,则必须指示它仍然是主键。将文档类定义更改为:

代码语言:javascript
复制
class MyCol(Document):
    _id = db.StringField()
    ...

若要指定主键,请执行以下操作:

代码语言:javascript
复制
class MyCol(Document):
    _id = db.StringField(primary_key=True)
    ...
票数 4
EN

Stack Overflow用户

发布于 2016-10-28 22:31:57

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

代码语言:javascript
复制
obj = my_collection.MyCol.objects.get(id='some_id')

代码语言:javascript
复制
obj = my_collection.MyCol.objects(id='some_id')
obj.delete()
票数 5
EN

Stack Overflow用户

发布于 2016-05-26 16:33:49

据我所知,根据文档中的注意事项

请注意,只有当文档存在于数据库中并且具有有效的id时,这才能工作。

只有当对象ID -- obj.delete()属性--具有有效的ObjectId值时,ObjectId才能工作。在您的示例中,您没有定义obj.id,请使用objects.delete()语法:

代码语言:javascript
复制
my_collection.MyCol.objects.delete()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37466212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档