3

我有以下型号

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

我写了以下查询:

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

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

4

2 回答 2

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

于 2012-02-13T11:17:27.310 回答
0

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

db.agent.find({name:'ashraf', 'skills.name' : "computer skills", level:{ $gt: 5}})
于 2012-02-11T18:17:49.330 回答