2015-08-12 3 views
0

У меня есть документ, который выглядит, как это в DocumentDBВыбор из массива в DocumentDB

{ 
    "profile": { 
    "personName": { 
     "namePrefix": XXX, 
     "givenName": "XXX", 
     "middleName": XXX, 
     "surname": "XXX", 
     "nameSuffix": XXX, 
     "nameTitle": XXX 
    }, 
    "telephones": { 
     "telephone": [ 
     { 
      "telephoneType": "Home", 
      "isDefault": true, 
      "countryAccessCode": 1, 
      "areaCityCode": XXX, 
      "phoneNumber": "XXX" 
     }, 
     { 
      "telephoneType": "Work", 
      "isDefault": false, 
      "countryAccessCode": 1, 
      "areaCityCode": XXX, 
      "phoneNumber": "XXX" 
     } 
     ] 
    }, 
    } 
    "id": "05d236f0-2970-4f04-9785-1c62c5ddbae5" 

Я пытаюсь работать с Azure Поиск и придавить мои данные по индексу. Я хотел бы включить только телефон, помеченный как isDefault = true.

Я попробовал следующее, а также попытался ARRAY_CONTAINS, но не вернул ожидаемые результаты.

SELECT p.id, p.profile.personName.givenName, p.profile.personName.surname, p.profile.telephones.telephone.countryAccessCode, p.profile.telephones.telephone.areaCityCode, p.profile.telephones.telephone.phoneNumber FROM Profiles p JOIN t IN p.profile.telephones.telephone WHERE t.isDefault = true 
+0

Вы можете включить, что ваши ожидаемые результаты, поэтому мы можем помочь обработать запрос для вас. –

+0

Моя цель - иметь плоское представление данных, поэтому я могу использовать его с Azure Search. –

ответ

2

Вы можете использовать псевдоним в вашем JOIN вытащить элемент массива.

Например:

SELECT p.id, 
     p.profile.personName.givenName, 
     p.profile.personName.surname, 
     t.countryAccessCode, 
     t.areaCityCode, 
     t.phoneNumber 
FROM Profiles p 
JOIN t IN p.profile.telephones.telephone 
WHERE t.isDefault = true 
+1

Мне удалось заставить это работать, спасибо вам большое. У меня еще один вопрос. Существует ли ограничение на количество соединений? Например, у меня есть 3 набора массивов в моем сообщении, и пока я только JOIN против 2, мой запрос работает. Как только я добавляю третий, он взрывается. –

+1

В настоящее время существует ограничение на 2 участника. Это связано с тем, что DocumentDB выполняет кросс-продукт, который может принести много результатов. Если вам нужно только отфильтровать (предложение WHERE) в элементе массива без каких-либо прогнозов (предложение SELECT), вы можете обойти это с помощью системной функции ARRAY_CONTAINS. –

Смежные вопросы