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 skill and level >5) のスキルを持つ Agent を検索したい

次のクエリを書きました。

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

エージェントがレベル = 3 の「コンピューター スキル」という名前のスキルを持ち、レベル = 10 の「英語スキル」という名前のスキルも持っている場合、このエージェントはクエリ結果に含まれます。

4

2 に答える 2

2

[1] クエリを実行する必要があり$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

于 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 に答える