2017-01-09 68 views
0

我使用MongoDB的,我有以下結構:的MongoDB - 一對多關係

websites

seo_keywords

因此,一個文件將如下所示:

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

而且在po STS包含一個集合:

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

我希望能夠在這兩個鏈接在一起,這樣的話我可以查詢所有的seo_keywords爲網站是由google

什麼是最好的/有效的方式來做這個?我已經讀了下面的方式可以實現這一點:

{ 
     "_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" 
      ] 
     ] 
    } 

但是,這是做到這一點最有效的方式?我能否通過僅使用ID或實際網站將文檔鏈接在一起?

回答

1

如果我們的關係密鑰在兩個集合中都相似,那麼我們可以使用$lookup來嘗試加入MongoDB 3.2+。

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

感謝這:D是否有可能使用一個地方做到這一點?所以我可以像'where WEBSITE = google.com'? – Phorce

+0

如果您想在此查詢中添加一些條件,我們可以使用$匹配 – Dineshaws