无法查询ListField(EmbeddedDocumentField)

时间:2012-02-11 15:35:04

标签: python mongodb mongoengine

我有以下型号

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))

我想搜索具有技能的代理商(名称=“计算机技能和级别> 5)

我写了以下查询:

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

如果代理人具有级别为3的名为“计算机技能”的技能,并且还具有级别= 10的名为“英语技能”的技能,则此代理将位于查询结果中

2 个答案:

答案 0 :(得分:2)

您需要执行$elemMatch [1]查询,目前在mongoengine中没有内置支持。您必须执行原始查询,如下所示:

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

答案 1 :(得分:0)

我不使用python驱动程序,但是你想要完成的一般Mongo语法就是这个....

db.agent.find({name:'ashraf', 'skills.name' : "computer skills", level:{ $gt: 5}})