2016-08-21 2 views
0

Ich habe eine Sammlung auf Mongo namens "Berichte", die die Möglichkeit für Kunden hat, Kommentare und Diskussionen zu haben.

Hier ist, wie die „Diskussionen“ Array wie in jedem Bericht aussieht:

"discussions" : [ 
    { 
     "user_id" : "david", 
     "timestamp" : ISODate("2016-03-17T01:15:00Z"), 
     "comment" : "I was wondering, did anyone else find it interesting?", 
     "replies" : [ 
      { 
       "user_id" : "kevin", 
       "timestamp" : ISODate("2016-03-17T01:15:00Z"), 
       "comment" : "Not really" 
      } 
     ] 
    } 
] 

Da die Informationen, die auf den Benutzer über den einzelnen oft Kommentar zu ändern, möchte ich Referenzierung verwenden und ziehen ihre Informationen aus dem " Benutzer "Sammlung basierend auf den" user_id "-Feldern, anstatt ihre Informationen in jeden Diskussionsposten einzubetten. Ich möchte die Flexibilität haben, die gesamte Datenbank zu sharden, also ist "$ lookup" wahrscheinlich ein No-Go (da, wenn ich richtig verstehe, das Feld "from" in "$ lookup" nicht shearded sein kann).

Deshalb mag ich ein ‚$ oder‘ Abfrage erstellen, die die folgenden SQL ähnlich sein wird:

SELECT * FROM USERS WHERE id IN ('david', 'kevin') 

und das wird die zusätzliche Benutzerinformationen aus dem Benutzer Sammlung ziehen, kombiniert sie dann mit der Rest der Kommentardetails auf der Anwendungsebene.

Aus diesem Grund wird die Abfrage, die ich nach find() suche, von der Anwendung erstellt, indem die Ergebnisse von "reports" iteriert und die "user_id" extrahiert wird. Dies ist, wie die var_dump der Abfrage wie folgt aussieht:

array(1) { 
    ["$or"]=> 
    array(1) { 
    [0]=> 
    array(1) { 
     ["_id"]=> 
     string(4) "david" 
    }, 
    [1]=> 
    array(1) { 
     ["_id"]=> 
     string(4) "kevin" 
    } 
    } 
} 

Es ist jedoch nicht, wie ich diese Benutzer in der Datenbank keine Ergebnisse erhalten scheint zu funktionieren trotz. Hinweis: Die _id der Benutzer in der Sammlung "users" ist der Benutzername.

Mache ich die $ oder Abfrage falsch (alles, was ich in der Dokumentation sehe, ist '$ oder' auf verschiedenen Feldern durchgeführt)? Gibt es eine bessere Möglichkeit, dies vollständig zu entfernen? Vielen Dank im Voraus!

Antwort

0

Sie sollten stattdessen eine In-Abfrage verwenden. In Mongosyntax:

db.users.find({ "_id" : { $in : [ "david", "kevin" ] } }) 
Verwandte Themen