0

特定のタイプ EmbeddedDocumentAの ListField を含むDocumentがあります。これには、2 つの StringFieldsと.bBxy

class B(EmbeddedDocument):
    x = StringField()
    y = StringField()

class A(Document):
    b = ListField(EmbeddedDocumentField(B))

最初にそれらを入力しましょう:

b1 = B(x="x1", y="y1")
b2 = B(x="x2", y="y2")
a = A(b=[b1, b2])
a.save()

と の値を持つA特定のエントリを含むのインスタンスを検索したいと考えています。Bx=x1y=y1

contains値ごとに 1 つずつ、2 つのクエリを作成しようとしました。

A.objects(b__x__contains="x1", b__y__contains="y1")
[<A: A object>]

成功例は機能します。問題は、条件が独立していて、 list の異なるエントリに一致する可能性があることですb:

A.objects(b__x__contains="x1", b__y__contains="y2")
[<A: A object>]

MongoEngine で、これら 2 つの条件が同じエントリに適用されるようにする方法はありますか?

前もって感謝します。

4

2 に答える 2

0

MongoEngine Githubの issue #379で答えを見つけました。

$elemMatch は にマップされましたfield__match

したがって、成功例は次のように機能します。

A.objects(b__match={"x": "x1", "y": "y1"})
[<A: A object>]

そして、間違ったケースは失敗します:

A.objects(b__match={"x": "x2", "y": "y1"})
[]

私が必要としているものが $elemMatch と同等であることを示してくれた Afil に感謝します。

于 2014-08-23T23:18:09.993 に答える