Python can';t查询列表字段(EmbeddedDocumentField)

Python can';t查询列表字段(EmbeddedDocumentField),python,mongodb,mongoengine,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 = ListF

我有下面的型号

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=“computer skills and level>5)技能的代理

我编写了以下查询:

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

如果一个代理拥有级别为3的名为“计算机技能”的技能,以及级别为10的名为“英语技能”的技能,那么该代理将出现在查询结果中,我不使用python驱动程序,但您尝试实现的一般Mongo语法是

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

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

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

[1]

我想查询具有技能名称x和技能级别y的代理,此技能说明:-该代理具有每个名称和级别的技能列表我理解,我提供的查询符合您的要求,除非我遗漏了什么…它查询代理名称、技能名称和技能级别,从我的examp中删除
名称:'ashraf'
le,你将得到所有拥有技能x和技能等级y的特工