Ale*_*.P. 0 python mongodb mongoengine
我有从DB和wat中检索的文档以选择任何其他排除此文档.我试过以下查询:
{'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')}}
Run Code Online (Sandbox Code Playgroud)
最后一个是MongoDB控制台的有效查询,前两个 - 我试图传递给我的查询对象的查询失败并显示错误消息:
>>>User.object.query(my_query)
ValidationError: {'$ne': ObjectId('51f7f13fca798933a0c70f69')} is not a valid ObjectId
Run Code Online (Sandbox Code Playgroud)
怎么解决?
MongoEngine 有自己的查询语法,与 pymongo 不同。
示例可以在文档中看到:http : //docs.mongoengine.org/en/latest/guide/querying.html
正如@bpgergo 提到的,您需要将查询转换为正确的语法,例如:
User.objects.filter(id__ne="51f7f13fca798933a0c70f69", email = 'test@mail.com')
Run Code Online (Sandbox Code Playgroud)
我认为前两个查询无效的原因是不存在的字段:'id','pk'.注意id之前的下划线:_id.
在我的控制台中,这是一个有效的查询:
db.user.find( { 'email' : 'test@mail.com', '_id' : { '$ne' : ObjectId("51d41232ccf2f1a165a92ca6")} } )
Run Code Online (Sandbox Code Playgroud)
编辑这是解决方案:
User.objects.filter(email = 'test@mail.com').filter(id__ne="51f7f13fca798933a0c70f69")更长的版本
我用mongoengine python模块0.8.4进行了测试,所以我尝试运行这行代码:
>>>User.object.query(my_query)
Run Code Online (Sandbox Code Playgroud)
首先,Document类没有object属性,它有objects.其次,objects一个查询集并没有query方法.我在mongoengine可以做的是这样的:
>>> res = User.objects.filter(email = 'email51@acme.com')
>>> res[0].email
u'email51@acme.com'
Run Code Online (Sandbox Code Playgroud)
到现在为止!此查询将返回相同的错误:
User.objects.filter(email = 'email51@acme.com').filter(id__ne="ObjectId('51d41232ccf2f1a165a92cab')")
mongoengine.errors.ValidationError: ObjectId('51d41232ccf2f1a165a92cab') is not a valid ObjectId
Run Code Online (Sandbox Code Playgroud)
这是正确的方式:
User.objects.filter(email = 'email51@acme.com').filter(id__ne="51d41232ccf2f1a165a92cab")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2108 次 |
| 最近记录: |