2016-05-31 3 views
0

Wie kann ich nach dem Empfang von Ergebnissen nach einem anderen Dokument in einer anderen Sammlung suchen? Zum Beispiel habe ich eine große Sammlung namens Posts und eine andere große Sammlung namens Users.Wie kann ich ein anderes Dokument in einer anderen Sammlung nach dem Rückruf mit MongoDB abfragen?

Jeder Benutzer kann mehrere Beiträge erstellen, und andere Benutzer können diese Beiträge nur anzeigen, wenn sie mit ihnen befreundet sind oder ihnen folgen. Hier ist ein Beispiel eines User:

{ 
    _id: 1234, 
    name: "Jack", 
    username: 'jack', 
    friends: [9439, 4957, 2847] 
    followers: [9111, 5746, 6576], 
    following: [2121, 4382] 
} 

Und hier ist ein Beispiel für eine Post:

{ 
    _id: 2948, 
    text: "Hello World", 
    postedBy: 4957 
} 

Da das oben ist postedBy Benutzer 4957, und das obige Beispiel Benutzer, Jack, ist befreundet mit Benutzer 4957, sollte er diesen Beitrag zurück erhalten.

Ich bin nicht sicher, wie ich das angehen soll, weil ich neu mit MongoDB bin, obwohl ich annehme, dass eine Gesamtpipeline wahrscheinlich erforderlich sein würde. Ich vermute, es würde nach Posts suchen müssen, erhalten Sie die postedBy, überprüfen Sie, ob es in den angemeldeten Benutzer friends oder following Array besteht, dann fahren Sie mit dem nächsten Beitrag. Ich werde nur ein Limit von 20 Posts pro Anfrage zurückgeben.

Ich kann eingebettete Dokumente nicht verwenden, da beide Modelle jederzeit geändert werden können.

Antwort

0

versuchen, diese Abfrage, wenn Sie Abfrage aus einer Sammlung in eine andere Sammlung in mongodb Verwendung $ Lookup

diese Abfrage Rückkehr Benutzer colection mit Freunden

Post verwenden möchten
db.getCollection('user').aggregate([ 
{ 
     $unwind: "$friends" 
    }, 
    { 
     $lookup: 
     { 
      from: "post", 
      localField: "friends", 
      foreignField: "postedBy", 
      as: "friendsPost" 
     } 
    }, 
    { 
     $match: { "friendsPost": { $ne: [] } } 
    } 
]) 

diese Abfrage Rückkehr Ausgabe wie folgt

{ 
    "waitedMS" : NumberLong(0), 
    "result" : [ 
     { 
      "_id" : 1234, 
      "name" : "Jack", 
      "username" : "jack", 
      "friends" : 4957, 
      "followers" : [9111,5746,6576], 
      "following" : [2121, 4382], 
      "friendsPost" : [ 
       { 
        "_id" : 2948, 
        "text" : "Hello World", 
        "postedBy" : 4957 
       } 
      ] 
     } 
    ], 
    "ok" : 1.0000000000000000 
} 
Verwandte Themen