无法在ListField(嵌入文档字段)上查询
我有一个这样的模型:
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
我不使用Python驱动,但你想要实现的功能在MongoDB中的一般写法是这样的……
db.agent.find({name:'ashraf', 'skills.name' : "computer skills", level:{ $gt: 5}})
2
你需要使用一个叫做 $elemMatch
的查询,但目前在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