mongodb-query auf DBRef-Typ
Wie schalte ich diese Abfrage in eine gültige mongodb-Query in mongodb shell.
{ 'cars.owner.$ref' : 'users' }
cars.owner
ist ein DBRef hier, aber $ref
ist ungültig
Bekomme ich diesen Fehler:
"$err" : "Positional operator does not match the query specifier."
Mein Ziel hier um herauszufinden, wenn es irgendwelche Autos "besessen" von verschiedenen Sammlungen dann Benutzer.
- Wenn Sie erlauben nur die Referenzen zu einer Sammlung, Sie sind in der Regel besser mit der Speicherung nur die _id statt einer DBRef.
- Ich bin nur die Erkundung der Daten. Was ist die motivation für die nur die Speicherung der _id statt einer DBRef ?
- DBRef ist im Grunde als veraltet und würde ich nicht halten viel Hoffnung für die laufende Treiber-Unterstützung in der Zukunft. Es war eine frühe Idee, nicht sehr gut konzipiert eine. Das format speichert die Feldnamen, die in Konflikt mit der nun etablierten Namenskonventionen für reservierte Zeichen, wie gut. Die Allgemeine Konvention ist nun einfach speichern
_id
des Dokuments und Optional die Sammlung und/oder Datenbank-namespace selbst, oder über das externe schema der Logik, beschreibt die Beziehungen und nur die_id
. Beharren DBRef ist eine dunkle Straße, gefüllt mit Schrecken. Aussteigen, solange du kannst. - Wo in den docs finde ich, dass DBRef ist veraltet ?
- Ein DBRef ist ein Objekt, das enthält die _id, die Sammlung und Optional die Datenbank. In den meisten Situationen, die Sie bereits wissen, die Sammlung und der Datenbank, in der Bezug genommen wird, gefunden werden, so sind Sie nutzlos aufblasen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
MongoDB-Dokumentation (Datenbank-Referenz) sagt Folgendes:
Ich weiß nicht, über irgendwelche Pläne, aber ich habe gelesen, dass DBRefs werden sollte, veraltet(?) heute. Allerdings können Sie mit fetch() -Methode zum laden von referenzierten Dokumenten. Zum Beispiel habe ich ein formView-Sammlung, die Dokumente speichert, enthält (DBRef) Verweise auf Dokumente in formContent Sammlung. So, läuft:
...Führt zu folgender Ausgabe:
Können Sie die Abfrage der DBRef in der Mongo-shell, aber Sie müssen verwenden Sie die DBRef () - Funktion. Die Referenz muss mindestens den $ref und $id. Aus der docs:
Als Autos.Besitzer ist ein Verweis auf ein Dokument in der users-collection, eine Abfrage aller Autos, in denen Eigentümer eine gewisse _id Aussehen könnte (vorausgesetzt, beide Sammlungen sind in der gleichen Datenbank):
Den $ref und $id-Werte können nicht direkt abgefragt werden. Die DBRef ist besonders nützlich in dem Fall, wenn es mehrere Verweise auf verschiedene Sammlungen in das gleiche Dokument. Mit DBRef wäre des guten zuviel, wenn es nur eine Referenz in das Dokument, wie andere erwähnt haben.
Wenn Sie brauchen, um auf verschiedene Sammlungen in Ihrem Eigentümer-Feld, sind Sie wahrscheinlich besser gedient werden, durch die Verwendung von separaten owner_collection und owner_id Felder. Die Abfrage aller Eigentümer, die keine Benutzer sind, wäre dann eine standard-Abfrage:
setzen in der Sammlung.Dann Erstellen Sie eine Bean mit feild Namen als parameterName und setzen @Reference annotation von morphia orm dann tun Operationen, die Sie möchten