DocumentDB: вземете всички документи от същия тип обект

Съхранявам документи от няколко различни типа (типове обекти?) в една колекция. Какъв би бил най-добрият начин да получите всички документи от определен тип (както бихте направили с select * от таблица).

Опции, които виждам досега:

  1. Включете типа като свойство. Но това би означавало разглеждане на всеки документ при получаване на документите, нали?
  2. Добавете името на типа към идентификатора на документа и опитайте да търсите по идентификатор с typename*.

Има ли по-добър начин да направите това?


person Thomas    schedule 10.04.2016    source източник


Отговори (3)


Няма вградено свойство тип обект, но със сигурност можете да създадете свое собствено и да се уверите, че е индексирано. На този етап това е толкова просто, колкото добавянето на клауза WHERE:

WHERE docs.docType = "SomeType"

Ако приемем, че това е базиран на хеш индекс, това трябва да осигури ефективни търсения и да филтрира нежелани типове документи.

Въпреки че можете да вградите типа в свойство (като идентификатор на документ), тогава ще трябва да правите частични съвпадения на низове, което няма да е толкова ефективно, колкото сравнението на индексирано свойство.

Ако сте любопитни да разберете какво ви струва тази заявка, RU стойността се показва както в портала, така и чрез x-ms-request-charge заглавка за връщане.

person David Makogon    schedule 10.04.2016

Съгласен съм с отговора на Дейвид и използването на едно поле docType е това, което направих, когато за първи път започнах да използвам DocumentDB. Има обаче и друга опция, която започнах да използвам след няколко експеримента. Това означава да създадете поле is<Type> и да зададете стойността му на true. Това е малко по-ефективно за заявки, отколкото използването на поле с единичен низ, тъй като самите индекси са по-малки частични индекси, но биха могли потенциално да заемат малко повече място за съхранение.

Другото предимство на този подход е, че предоставя предимства за наследяване и миксини. Например, имам както isLookup=true, така и isState=true на определени обекти. Имам и други видове търсене. След това в кода на моето приложение някои поведения са общи за всички полета за търсене, а други поведения са приложими само за типа State.

person Larry Maccherone    schedule 11.04.2016
comment
Виждал съм да препоръчвате тази техника в множество отговори. Как постигате това isLookup=true? добавяте ли тези свойства към всеки клас обект или сте разработили по-генерична техника? - person trailmax; 24.08.2017
comment
Използвам node.js, така че не съм сигурен за най-добрия начин да го направя с .NET - person Larry Maccherone; 24.08.2017
comment
Виждам. Благодаря за изясняването на тези проблеми - намерих отговорите ви за DocumentDB за най-полезни. - person trailmax; 24.08.2017

Ако индексирате свойството type в колекцията, това няма да бъде пълно сканиране.

person Satish Kumar Rangavajjula    schedule 10.04.2016