2017-01-09 2 views
0

Ich bin mit MongoDB und ich habe die folgende Struktur:MongoDB - Ein zu viele Beziehungen

websites

und

seo_keywords

So ein Dokument wie folgt aussehen würde:

{ 
    "_id" : ObjectId("58503934034b512b419a6eab"), 
    "website" : "https://www.google.com", 
    "keywords" : [ 
     "testing", 
     "search", 
     "engine" 
    ] 
} 

Und in po sts enthält eine Sammlung:

{ 
    "_id" : ObjectId("5873656cf632580b98e889b4"), 
    "position" : 2, 
    "keyword" : "search", 
    "found_url" : "https://google.com/" 
} 

ich in der Lage sein wollen, diese beiden miteinander zu verbinden, so ist, dann kann ich alle die seo_keywords für Websites abfragen, die von google

sind, was die beste/effiziente Art und Weise zu mach das? Ich habe gelesen, dass der folgende Weg dies erreichen könnte:

{ 
     "_id" : ObjectId("5873656cf632580b98e889b4"), 
     "position" : 2, 
     "keyword" : "search", 
     "found_url" : "https://google.com/", 

     "website" : [ 
      "_id" : ObjectId("58503934034b512b419a6eab"), 
      "website" : "https://www.google.com", 
      "keywords" : [ 
       "testing", 
       "search", 
       "engine" 
      ] 
     ] 
    } 

Aber ist dies der effizienteste Weg, dies zu tun? Kann ich die Dokumente nicht einfach mit einer ID oder der eigentlichen Website verknüpfen?

Antwort

1

Wir können versuchen mit $lookup, da es Beitritt in MongoDB 3.2 + bietet, wenn unser relationaler Schlüssel in beiden Sammlungen ähnlich ist.

db.posts.aggregate([ 
    { 
     $lookup: 
     { 
      from: "websites", 
      localField: "found_url", 
      foreignField: "website", 
      as: "post_websites" 
     } 
    } 
]) 
+0

Danke dafür: D Ist es möglich, dies auch mit einem where zu tun? Also kann ich wie 'where WEBSITE = google.com' sein? – Phorce

+0

können wir $ match verwenden, wenn Sie eine Bedingung in diese Abfrage setzen möchten – Dineshaws

Verwandte Themen