Verwendung des Positionsoperators $ von MongoDB in einer tief verschachtelten Dokumentabfrage

9

Ist es möglich, den Positionsoperator '$' in Kombination mit einer Abfrage in einem tief verschachtelten Dokumentarray zu verwenden?

Betrachten Sie das folgende verschachtelte Dokument, das einen 'Benutzer' definiert:

%Vor%

Wir möchten die "Schlösser" für einen bestimmten Benutzer, z. in einer Form:

%Vor%

Da Sie den $ Operator nicht zweimal benutzen können ( Ссылка ), weiß ich, dass ich auch nicht nachfragen kann ein bestimmtes Königreich, also versuche ich eine Fundaussage für das n. Königreich zu schreiben.

Dies scheint bei der Aktualisierung eines tief verschachtelten Unterdokuments ( Mongodb-Update zutiefst verschachtelt) sinnvoll zu sein Filialdokument ), aber ich habe weniger Erfolg mit der Suchabfrage.

Ich kann die Gebäude des ersten Königreichs mit der Abfrage zurückgeben:

%Vor%

Aber das gibt all die Gebäude dieses Königreiches zurück.

Nach den einstufigen Beispielen des Positionsoperators versuche ich eine Abfrage wie folgt:

%Vor%

um in der Form zu sein:

%Vor%

wie in der Dokumentation beschrieben Ссылка S

Dies schlägt jedoch mit dem Fehler fehl:

%Vor%

Vermutlich, weil kingdoms.buildings nicht als Array betrachtet wird. Ich habe auch kingdoms..0.buildings

ausprobiert

Es ist verwirrend, weil dies anscheinend für Updates funktioniert (laut Mongodb-Update tief verschachteltes Filialdokument )

Habe ich gerade die Syntax falsch oder wird das nicht unterstützt? Wenn ja, gibt es einen Weg, etwas Ähnliches zu erreichen?

    
Hugheth 31.10.2014, 13:58
quelle

1 Antwort

3

Sie erhalten einen Fehler von

%Vor%

weil es einen Schreibfehler gibt ("kingdom.buildings. $" sollte "kingdom s .buildings. $" sein).
Jedoch kann dieser Weg nicht das erreichen, was du erwartest.
$ zielt immer auf Königreiche auf dem Weg von rigides.buildings erstes Array.

Dies ist ein Weg, der in der Lage sein sollte, das Problem zu lösen.
(V2.6 + erforderlich)

%Vor%

Um nur das erste Element von Königreiche zu reservieren,

%Vor%     
Wizard 01.11.2014, 14:51
quelle