2015-05-19 52 views
2

假設我有三個模型的文件的作者,文章和出版物帆JS複雜的多對多關聯

我model.js如下

//author.js 
attributes : { 
name : 'string', 
articles : { 
    collection : 'article', 
    via : 'authors' 
} 
} 

//article.js 
attributes : { 
name : 'string', 
authors : { 
    collection : 'author', 
    via : 'articles' 
}, 
publication : { 
    model : 'publication' 
} 
} 

//publication.js 
attributes : { 
name : 'string', 
articles : { 
    collection : 'article', 
    via : 'publication' 
} 
} 

從以上的協會,如果我得到一個由作家他的ID,它將返回筆者詳細信息,然後他寫的文章,我也希望是條款必須表明它具有與發佈模型的關聯。我無法獲得任何建議。

我試過帆文檔,但在那裏,我只能找到一個關聯的層

我使用MongoDB的作爲我的數據庫

在此先感謝

回答

2

遺憾地說,但就目前來說,沒有辦法在單個數據庫查詢中執行此操作。你可以在兩個或多個數據庫查詢中完成。例子就是這樣。

Author 
.findOne(2) 
.populate('articles') 
.exec(function (err, itemPost){ 
    // some error handling 
    async.map(itemPost.articles, 
     function (article, callback){ 
      Article 
      .findOne(article.id) 
      .populateAll() 
      .exec(function (errArticles, articleItem){ 
       if(errArticles){return callback(errArticles)}; 
       callback(null, articleItem); 
      }); 
     }, 
     function (errFromIterator, results){ 
      if(errFromIterator){res.serverError()}; 

      var itemPostToJSON = itemPost.toJSON(); 

      itemPostToJSON.comments = results; 

      var clone = _.clone(itemPostToJSON); 

      res.send(clone); 
     } 
    ) 
}); 

看起來人們已經討論過這個問題了很多。我給你一個他們的討論link。我的解決方案也是從那裏採取的。希望能幫助到你。

[N. B.:我沒有運行這個代碼。所以不能說他們是否是一個錯誤。看起來像它的好,所以我稱它給你。]

+0

感謝您的鏈接,從您與一些修改,我可以能夠得到整個文章的細節在文章陣列擁有多一個作者集合,但返回上面的代碼我實現了我與Dinanas代碼https://gist.github.com/dinana/52453ecb00d469bb7f12要求,即聯繫是如此的幫助,再次感謝 –