MongoDB unterstützt keine Joins. Wenn Sie die Nachrichten den Benutzern zuordnen möchten, können Sie Folgendes tun:
1) Tun Sie dies auf der Anwendungsebene. Holen Sie sich die Liste der Benutzer, und holen Sie sich die Liste der Nachrichten und ordnen Sie sie in Ihrer Anwendung zu. Diese Methode ist sehr teuer, wenn Sie dies oft benötigen.
2) Wenn Sie den vorherigen Schritt häufig ausführen müssen, sollten Sie Ihr Schema so umgestalten, dass die Nachrichtenartikel zusammen mit den Benutzerdokumenten als eingebettete Dokumente gespeichert werden.
%Vor%Sobald Sie Ihre Daten in diesem Format haben, ist die Abfrage, die Sie ausführen möchten, implizit. Es ist jedoch zu beachten, dass Analyseabfragen in einem solchen Schema schwierig werden. Sie müssen MapReduce verwenden, um die zuletzt hinzugefügten Nachrichtenartikel und solche Abfragen abzurufen.
Am Ende hängen der Schemadesign und die Denormalisierung Ihrer Anwendung davon ab, welche Art von Abfragen von Ihrer Anwendung erwartet werden.
Sie können diese Links nützlich finden. Ссылка http://www.blip.tv/file/3704083
Ich hoffe, das war hilfreich.
Vergessen Sie Joins.
Machen Sie einen Fund in Ihren Nachrichten. Übernehmen Sie die Überspringungsnummer und den Grenzwert für das Auslagern der Ergebnisse.
%Vor%Dann durchlaufen Sie die Sammlung und greifen Sie auf die user_id. In diesem Beispiel wären Sie auf 10 Elemente beschränkt. Führen Sie nun eine Abfrage nach Benutzern für die gefundenen Benutzer-ID-Elemente durch.
%Vor%Wenn Sie die Nachrichten ausdrucken, können Benutzerinformationen aus der Benutzersammlung basierend auf der Benutzer-ID angezeigt werden.
Sie haben 2 Anfragen an die Datenbank gestellt. Keine Unordnung mit Joins und Herausfinden von Feldnamen usw. EINFACH !!!
Wenn Sie die neue Version von MongoDB (3.2) verwenden, erhalten Sie mit dem $lookup
-Operator, der mit einem linken äußeren Join in SQL verglichen werden kann.
Die Nachteile bei der Verwendung dieses Operators sind, dass er sehr ineffizient ist, wenn er über große Ergebnismengen ausgeführt wird, und er unterstützt nur die Gleichheit für die Übereinstimmung, bei der die Gleichheit zwischen einem einzelnen Schlüssel aus jeder Sammlung bestehen muss. Die andere Einschränkung ist, dass die Right-Collection eine nicht erschöpfte Sammlung in derselben Datenbank wie die Linke-Sammlung sein sollte.
Die folgende Aggregationsoperation für die news
-Kollektion verknüpft die Dokumente von news
mit den Dokumenten aus der users
-Kollektion, indem die Felder user_id
aus der news
-Kollektion und %%_Co_de% aus% verwendet werden. co_de% sammlung:
Die äquivalente PHP-Beispielimplementierung:
%Vor%Das geht nicht in mongoDB. Und seit Version 3 ist Eval () veraltet, also sollten Sie auch keine gespeicherten Prozeduren verwenden.
Der einzige Weg, den ich kenne, um eine serverseitige Abfrage mit mehreren Sammlungen zu erreichen, ist die Verwendung von Node.js oder ähnlichem. Aber wenn Sie diese Methode ausprobieren, empfehle ich Ihnen dringend, die IP-Adressen, die auf Ihren Rechner zugreifen dürfen, aus Sicherheitsgründen zu beschränken.
Wenn Ihre Sammlungen nicht zu groß sind, können Sie innere Verbindungen vermeiden, die sie denormalisieren.
Tags und Links mongodb mongodb-php