Cosmos DB - выбор корневого документа на основе дочерних данных

Извините, если это вопрос новичка, но я новичок в Cosmos DB.

Я пытаюсь выбрать все корневые документы из моей коллекции, где дочерний элемент соответствует указанным (нескольким) критериям.

Предположим, у вас есть документ ORDER, который содержит ORDERITEMS в качестве документа дополнительных данных. Мне нужно запросить все заказы, в которых был заказан конкретный продукт, и вернуть весь документ заказа.

[
    {
        "order": {
            "id": "1",
            "orderiems": [
                {
                    "partcode": "A",
                    "qty": "4"
                },
                {
                    "partcode": "B",
                    "qty": "4"
                },
                {
                    "partcode": "C",
                    "qty": "4"
                }
            ]
        }
    },
    {
        "order": {
            "id": "2",
            "orderiems": [
                {
                    "partcode": "A",
                    "qty": "4"
                },
                {
                    "partcode": "B",
                    "qty": "4"
                },
                {
                    "partcode": "A",
                    "qty": "4"
                }
            ]
        }
    },
    {
        "order": {
            "id": "3",
            "orderiems": [
                {
                    "partcode": "A",
                    "qty": "1"
                }
            ]
        }
    }
]

Мой запрос

SELECT order from order
JOIN items in order.orderitem
WHERE item.partcode = '<mypartcode>
  AND item.qty > 1

Сейчас этот вид работает и возвращает мне заказы, но он возвращается

  • id: 1
  • id: 2
  • id: 2 ‹---------------- повторяется

потому что id: 2 имеет два одинаковых элемента .... id: 3 исключено, потому что это только 1 элемент

В обычном SQL Server SQL я бы просто

SELECT *
  from Orders o 
 where exists (select 1 
                 from OrderItems oi 
                where oi.ordID = o.ID 
                  and oi.partcode = 'A'
                  and oi.qty > 1)

Как мне остановить дублирование, пожалуйста

Обратите внимание, что приведенное выше изображение является созданным вручную, чтобы упростить задачу, поскольку модель документа, над которой я работаю, очень большая


person Chris Hammond    schedule 04.03.2019    source источник
comment
Не могли бы вы обновить свой текущий запрос. Я пытаюсь сопоставить его с вашим набором данных, но он не возвращает то, что вы описываете.   -  person Nick Chapsas    schedule 04.03.2019
comment
Готово @NickChapsas - см. Аннотацию в конце вопроса (выделена жирным шрифтом)   -  person Chris Hammond    schedule 04.03.2019
comment
Вы пробовали использовать особое ключевое слово? Кстати, я все еще не могу использовать ваш запрос.   -  person Nick Chapsas    schedule 04.03.2019
comment
Что ж, меня взорвет ... DISTINCT, похоже, работает, не думал, что это будет с полным документом (очень большим) ... thnx   -  person Chris Hammond    schedule 04.03.2019
comment
Написал ответ. Пожалуйста примите. Спасибо.   -  person Nick Chapsas    schedule 04.03.2019


Ответы (1)


Cosmos DB теперь поддерживает ключевое слово DISTINCT, и он действительно будет работать с такими вариантами использования документов, как ваш.

person Nick Chapsas    schedule 04.03.2019