我有以下型号
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的名为“英语技能”的技能,则此代理将位于查询结果中
答案 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}})