2017-10-17 31 views
1

私はCosmos DBを使用しており、配列内の複数の値に一致するSQLクエリを書きたいと思います。CosmosDB配列内の複数の値に一致するSQLクエリ

[ 
    { 
     "id": "31d4c08b-ee59-4ede-b801-3cacaea38808", 
     "name": "Oliver Queen", 
     "occupations": [ 
      { 
       "job_title": "Billionaire", 
       "job_satisfaction": "pretty good" 
      }, 
      { 
       "job_title": "Green Arrow", 
       "job_satisfaction": "meh" 
      } 
     ] 
    }, 
    { 
     "id": "689bdc38-9849-4a11-b856-53f8628b76c9", 
     "name": "Bruce Wayne", 
     "occupations": [ 
      { 
       "job_title": "Billionaire", 
       "job_satisfaction": "pretty good" 
      }, 
      { 
       "job_title": "Batman", 
       "job_satisfaction": "I'm Batman" 
      } 
     ] 
    }, 
    { 
     "id": "d1d3609a-0067-47e4-b7ff-afc7ee1a0147", 
     "name": "Clarke Kent", 
     "occupations": [ 
      { 
       "job_title": "Reporter", 
       "job_satisfaction": "average" 
      }, 
      { 
       "job_title": "Superman", 
       "job_satisfaction": "not as good as Batman" 
      } 
     ] 
    } 
] 

が、私は「億万長者」と「バットマン」ののjob_titleと職業を持っているすべてのエントリを返しますクエリを書きたい:手の込んだするには、次のコレクションを持っている想像してみてください。ただ結果が両方のjob_titlesを持っている必要があることを明確にする。したがって、上記のコレクションではBruce Wayneだけを返すべきです。

は、これまで私が試してみました:空の結果が返され、どちらも

SELECT c.id, c.name, c.occupations FROM c 
WHERE ARRAY_CONTAINS(c.occupations, {'job_title': 'Billionaire' }) 
AND ARRAY_CONTAINS(c.occupations, {'job_title': 'Batman' }) 

SELECT c.id, c.name, c.occupations FROM c 
WHERE c.occupations.job_title = 'Batman' 
AND c.occupations.job_title = 'Billionaire' 

。あなたはARRAY_CONTAINS(配列、search_value、is_partial_match = true)を使用する必要があり、事前

答えて

3

おかげで、すなわち、クエリは次のとおりです。

完全に働いた
SELECT c.id, c.name, c.occupations 
FROM c 
WHERE ARRAY_CONTAINS(c.occupations, {'job_title': 'Billionaire' }, true) 
AND ARRAY_CONTAINS(c.occupations, {'job_title': 'Batman' }, true) 
+0

。ありがとう。 –

関連する問題