0

我已经从数据库中检索到文件,并选择任何其他排除这个文件。我尝试了以下查询:

{'email': u'test@mail.com', 'id': {'$ne': ObjectId('51f7f13fca798933a0c70f69')}}
{'email': u'test@mail.com', 'pk': {'$ne': ObjectId('51f7f13fca798933a0c70f69')}}

{'email': u'test@mail.com', '_id': {'$ne': ObjectId('51f7f13fca798933a0c70f69')}}

最后一个是 MongoDB 控制台的有效查询,前两个 - 我尝试传递给我的查询对象的查询并失败并显示错误消息:

>>>User.object.query(my_query)

ValidationError: {'$ne': ObjectId('51f7f13fca798933a0c70f69')} is not a valid ObjectId

如何解决?

4

2 回答 2

7

我认为前两个查询无效的原因是不存在的字段:'id', 'pk'. 注意 id: 之前的下划线_id

在我的控制台中,这是一个有效的查询:

db.user.find( { 'email' : 'test@mail.com', '_id' : { '$ne' : ObjectId("51d41232ccf2f1a165a92ca6")} } )

编辑这是解决方案:

User.objects.filter(email = 'test@mail.com').filter(id__ne="51f7f13fca798933a0c70f69")

更长的版本

我已经用 0.8.4 版的 mongoengine python 模块对此进行了测试,所以我尝试运行这行代码:

>>>User.object.query(my_query)

首先,Document类没有object属性,它有objects. 其次,objects一个QuerySet,它没有query方法。我可以在 mongoengine 中做的事情是这样的:

>>> res = User.objects.filter(email = 'email51@acme.com')
>>> res[0].email
u'email51@acme.com'

到现在为止!此查询将返回相同的错误:

User.objects.filter(email = 'email51@acme.com').filter(id__ne="ObjectId('51d41232ccf2f1a165a92cab')")
mongoengine.errors.ValidationError: ObjectId('51d41232ccf2f1a165a92cab') is not a valid ObjectId

这是正确的表达方式:

User.objects.filter(email = 'email51@acme.com').filter(id__ne="51d41232ccf2f1a165a92cab")
于 2013-08-23T11:13:49.517 回答
6

MongoEngine 有自己的查询语法,与 pymongo 不同。

示例可以在文档中看到:http: //docs.mongoengine.org/en/latest/guide/querying.html

正如@bpgergo 提到的,您需要将查询转换为正确的语法,例如:

User.objects.filter(id__ne="51f7f13fca798933a0c70f69", email = 'test@mail.com')
于 2013-08-23T13:11:19.547 回答