2017-03-13 5 views
1

のは、私は次のドキュメントを持っていると仮定しましょう:どのように入力リストの条件を満たすサブドキュメントの結果を返すドキュメントdbクエリを書くことができますか?

[ 
    { 
    "name" : "obj1", 
    "field": [ "Foo1", "Foo3" ] 
    }, 
    { 
    "name": "obj2", 
    "field": [ "Foo2" ] 
    }, 
    { 
    "name": "obj3", 
    "field": [ "Foo3" ] 
    }, 
    { 
    "name": "obj4", 
    "field": [ "Foo1" ] 
    } 
] 

は、私は、フィールド=「FOO1」または「Foo3は」検索されたときにOBJ1返すクエリ、OBJ3、およびOBJ4を書きたいです。私は、検索リストの各値についてARRAY_CONTAINSでクエリ文字列を連結することにより、長いクエリを構築しないようにしたいけど

SELECT * FROM c WHERE ARRAY_CONTAINS(c.field, "Foo1") OR ARRAY_CONTAINS(c.field, "Foo3") 

:もちろん、私のようなものを書くことができます。

このクエリはどのように簡潔に表現できますか?

答えて

0

次のようにJOINを使用してクエリを書き直すことができます:あなたは両方のタグを持つオブジェクトを持っている場合、それが結果に複数回発生することを

SELECT c 
FROM c 
JOIN tag IN c.field 
WHERE ARRAY_CONTAINS(["Foo1", "Foo3"], tag) 

注意を、あなたは明確な/デを実行する必要がクライアント側で強化しています。

関連する問題