Запрашивать Cosmos DB для одних и тех же объектов из нескольких схем

Предоставьте следующие документы, хранящиеся в Cosmos DB, как мне получить все элементы Child / Children, где поле FirstName каждого дочернего элемента - «Bob»? Я пытаюсь использовать синтаксис SQL-запроса, но не нашел правильного способа сделать это, объединяющего оба результата схемы документа.

// Document 1
{
    "id": "document1",
    "Child": {
        "FirstName": "Bob",
        "LastName": "Smith"
    }
}

// Document 2
{
    "id": "document2",
    "Children": [
        {
            "Name": "Bob",
            "LastName": "Jones"
        },
        {
            "Name": "Sue",
            "LastName": "Jones"
        }
    ]
}

Я пытаюсь написать запрос, который ищет все дочерние элементы «Bob», чтобы получить следующий результат:

[
    {
        "FirstName": "Bob",
        "LastName": "Smith"
    },
    {
        "Name": "Bob",
        "LastName": "Jones"
    },
]

person Brian Vallelunga    schedule 07.10.2019    source источник
comment
так у вас два разных имени ребенок и дети?   -  person Sajeetharan    schedule 08.10.2019
comment
Более того, некоторые документы имеют один дочерний элемент, а другие документы содержат этот элемент в массиве. В этом случае дочерний элемент относится к общей структуре, а не к имени поля.   -  person Brian Vallelunga    schedule 08.10.2019


Ответы (1)


Документы Cosmos db хранятся в формате json, вы не можете одинаково обрабатывать свойство Child (улучшенная структура) и свойство Children (подструктура) с помощью одного запроса sql.

Тогда его нельзя расплющить и поместить в один объект, см. Пример:

введите здесь описание изображения

c.Child не отображается. Итак, я боюсь, что вам нужно запросить Child и Children по отдельности, а затем объединить их в соответствии с вашими требованиями.


Я пытался здесь объяснить. В одном запросе sql невозможно. Например, документ 1 не включает дочерний массив, а документ 2 включает. В одном sql необходимо C JOIN Children. Но для документа 1 Дочернее присоединение ничего не значит, поэтому результаты не будут извлечены. Вы можете попробовать.

Поскольку функция UNION не поддерживается cosmos db, я все же предлагаю выполнить приведенное выше предложение, чтобы запросить их отдельно и объединить.

person Jay Gong    schedule 08.10.2019
comment
Интересно, могу ли я использовать coalesce, чтобы попытаться вытащить элемент Child, когда элемент Children не существует? - person Brian Vallelunga; 08.10.2019
comment
Нет, к сожалению, я не нашел лучшего способа. - person Brian Vallelunga; 11.10.2019