无法查询ListField(EmbeddedDocumentField) [英] can't query over ListField(EmbeddedDocumentField)
本文介绍了无法查询ListField(EmbeddedDocumentField)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下型号
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 =计算机技能且等级> 5)
I want to search for the Agents that have skills with (name = "computer skills and level >5)
我写了以下查询:
Agent.objects.filter(name='ashraf', skills__level__gt=5,skills__name="Computer Skills")
如果某个座席具有名为计算机技能"且等级为3的技能,并且还具有一个名为英语技能"而等级为10的技能,则该座席将出现在查询结果中
If an Agent have skill named "Computer skills" with level = 3 and also have a skill named "English skills" with level = 10 this Agent will be in the query result
推荐答案
您将需要执行$elemMatch
[1]查询,并且mongoengine目前没有内置支持.您必须像这样进行原始查询:
You would need to do an $elemMatch
[1] query and there is no inbuilt support for it in mongoengine at this time. You'd have to do a raw query like so:
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
这篇关于无法查询ListField(EmbeddedDocumentField)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文