无法查询ListField(EmbeddedDocumentField) [英] can't query over ListField(EmbeddedDocumentField)

查看:190
本文介绍了无法查询ListField(EmbeddedDocumentField)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下型号

class Skill(EmbeddedDocument):
   name =  StringField(required = True)
   level = IntField(required = True)

class Agent(Document):
   name = StringField(required = True)
   email = EmailField(required = True, unique = True)
   skills = ListField(EmbeddedDocumentField(Skill))

我想搜索具有以下技能的特工:(name =计算机技能且等级> 5)

I want to search for the Agents that have skills with (name = "computer skills and level >5)

我写了以下查询:

 Agent.objects.filter(name='ashraf',  skills__level__gt=5,skills__name="Computer Skills")

如果某个座席具有名为计算机技能"且等级为3的技能,并且还具有一个名为英语技能"而等级为10的技能,则该座席将出现在查询结果中

If an Agent have skill named "Computer skills" with level = 3 and also have a skill named "English skills" with level = 10 this Agent will be in the query result

推荐答案

您将需要执行$elemMatch [1]查询,并且mongoengine目前没有内置支持.您必须像这样进行原始查询:

You would need to do an $elemMatch[1] query and there is no inbuilt support for it in mongoengine at this time. You'd have to do a raw query like so:

Agent.objects.filter(
    name='ashraf',  
    __raw__={"skills": {
        "$elemMatch": {
            "level": {"$gt": 5}, 
            "name": "Computer Skills"
        }
    }}
)

[1] http://www.mongodb.org/display/DOCS/Advanced + Queries#AdvancedQueries-%24elemMatch

这篇关于无法查询ListField(EmbeddedDocumentField)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆