Как найти дубликаты во вложенном массиве в db космоса без GROUP BY и COUNT - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь найти дубликаты во вложенном объекте в коллекции.В старом SQL я бы сделал это с помощью некоторого типа GROUP BY и COUNT.Cosmos DB не поддерживает GROUP BY (насколько я вижу), поэтому я пытаюсь найти обходной путь.Одним из ограничений является то, что у меня есть доступ только к обозревателю данных на портале Azure (не спрашивать).

Для более подробного объяснения, предположим, у вас есть коллекция, подобная следующей.Обратите внимание, что у первого элемента есть дубликат в коллекции «вещи»:

[
    {
        "id": "1",
        "Name": "Item with duplicate stuff",
        "stuff" : [
            {
                "name" : "A",
            },
            {
                "name" : "B",
            },
            {
                "name" : "A"
            }  
        ]
    },
    {
        "id": "2",
        "Name": "Item with unique stuff",
        "stuff" : [
            {
                "name" : "A",
            },
            {
                "name" : "B",
            },
            {
                "name" : "C"
            }  
        ]
    }    

Я хочу найти все элементы в моей коллекции, которые имеют дубликаты, в свойстве «вещи».Так что в этом случае он вернул бы элемент с идентификатором «1».Что-то вроде этого было бы неплохо:

[
    {
        "id": "1"
    } 
] 

Ничто из того, что я пробовал, не сработало и не подходит для показа здесь.

1 Ответ

0 голосов
/ 29 мая 2018

Да, как вы упомянули, CosmosDB в настоящее время не поддерживает GROUP BY и другие агрегации.

Однако, вы можете достичь группы, используя documentdb-lumenize.Вы загружаете cube.string как хранимую процедуру, а затем вызываете ее с конфигурацией агрегации.

{cubeConfig: {groupBy: "name", field: "stuff.name", f: "max"}}

, который должен делать то, что вы хотите.

или, если вы все еще хотите использовать sql api, вы можете попробовать использовать Join, как объяснено в ответе here

Лично я тоже столкнулся с той же проблемой, но мне пришлось справиться с моей собственной логикой после получения записей с отфильтрованными условиями.

РЕДАКТИРОВАТЬ

С комментарием ниже, это должно быть "Да", так как вы упомянули, что CosmosDB в настоящее время не поддерживает GROUP BY и другие агрегации .

...