2016-04-10 13 views
3

Ich speichere Dokumente verschiedener Typen (Entitätstypen?) In einer einzigen Sammlung. Was wäre der beste Weg, alle Dokumente eines bestimmten Typs zu bekommen (wie Sie mit select * aus einer Tabelle tun würden).DocumentDB: Alle Dokumente desselben Entitätstyps abrufen

Optionen Ich sehe so weit:

  1. Fügen Sie den Typ als Eigenschaft. Aber das würde bedeuten, dass man sich jedes Dokument ansieht, wenn man die Dokumente bekommt, oder?
  2. Den Typnamen der Dokument-ID voranstellen und versuchen, nach ID mit typename* zu suchen.

Gibt es einen besseren Weg, dies zu tun?

Antwort

4

Es gibt keine integrierte Entitätstypeigenschaft, aber Sie können sicherlich Ihre eigenen erstellen und sicherstellen, dass sie indiziert ist. An diesem Punkt ist es so einfach, wie eine WHERE-Klausel hinzu:

WHERE docs.docType = "SomeType" 

Angenommen, es ist ein Hash-basierten Index sollte diese effiziente Lookups bieten und unerwünschte Dokumenttypen herauszufiltern.

Während Sie können den Typ in eine Eigenschaft (wie Dokument-ID) einbetten, würden Sie dann Teil-String-Matches zu tun haben, die nicht so effizient wie eine indizierte Eigenschaft Vergleich sein.

Wenn Sie wissen möchten, was diese Abfrage kostet, wird der RU-Wert sowohl im Portal als auch über die Rückgabekopfzeile x-ms-request-charge angezeigt.

1

Wenn Sie die type -Eigenschaft für die Sammlung indexieren, ist dies kein vollständiger Scan.

2

Ich stimme mit Davids Antwort überein und die Verwendung eines einzigen docType Felds ist das, was ich getan habe, als ich anfing, DocumentDB zu verwenden. Es gibt jedoch eine weitere Option, die ich nach einigen Experimenten einsetzte. Das ist ein is<Type> Feld erstellen und seinen Wert auf True festlegen. Dies ist für Abfragen etwas effizienter als die Verwendung eines einzelnen Zeichenfolgenfelds, da die Indizes selbst kleinere Teilindizes sind, aber möglicherweise etwas mehr Speicherplatz belegen können.

Der andere Vorteil dieses Ansatzes ist, dass es Vorteile für Vererbung und Mixins bietet. Zum Beispiel habe ich sowohl isLookup=true als auch isState=true für bestimmte Entitäten. Ich habe auch andere Lookup-Typen. Dann sind in meinem Anwendungscode einige Verhaltensweisen für alle Nachschlagefelder üblich, und andere Verhaltensweisen gelten nur für den Zustandstyp.

+0

Ich habe gesehen, dass Sie diese Technik in mehreren Antworten empfehlen. Wie erreichst du das? IsLookup = true? fügen Sie diese Eigenschaften für jede Entitätsklasse hinzu oder haben Sie eine allgemeinere Technik entwickelt? – trailmax

+0

Ich benutze node.js so nicht sicher über die beste Möglichkeit, es mit .NET zu tun –

+0

Ich sehe. Danke, dass Sie diese Fragen geklärt haben - ich fand Ihre Antworten zu DocumentDB am nützlichsten. – trailmax

Verwandte Themen