2016-11-10 36 views
0

我的後文件如下所示:CouchDB的取得帖子作者

{ 
    _id: ..., 
    type: 'post', 
    title: ..., 
    description: ..., 
    author: 'user_id' 
} 

而另一個用戶文檔:

{ 
    _id: 'user_id', 
    type: 'user', 
    name: ..., 
} 

如何抓的帖子和鏈接的用戶文檔因爲我只知道帖子ID

讓用戶文檔在帖子文檔中看起來不是一個好的解決方案,就好像用戶改變他/她的名字或其他細節一樣,我將不得不更新每篇文章。

另一種解決方案是在用戶文檔中包含posts數組,並在視圖文檔中使用兩個發射。但由於帖子頻繁和帖子數量多,這看起來有點低效。

回答

1

您提到「鏈接的文檔」,就好像您在CouchDB中引用此功能一樣,但它並不像您這樣表示。原來,這是totally supported。您的文檔結構不需要做任何改動,就可以使用地圖功能是這樣的:

function (doc) { 
    if (doc.type === 'post') { 
    emit(doc._id) 
    emit(doc._id, { _id: doc.author }) 
    } 
} 

所謂具有_id屬性作爲值發光的物體,它允許CouchDB的查找不同的文件(在這種情況下,用戶文檔)比當您在視圖查詢中添加include_docs=true時的原始文檔更爲重要。這使您可以在單個查詢中獲取完整的相關文檔集合!我會參考前面鏈接到的文檔以獲得完整的示例。 (其他的文檔也很棒!)

+0

感謝您的回覆。但是,我試過這個。但我沒有收到作者文件。它將兩次返回給我。 – pewpewlasers

+0

其實現在它工作!奇怪的。我對非空值域做了同樣的事情。可能是這個原因。謝謝回答我的問題。 couchdb的新功能。我已經通過文件,但有時對初學者來說有點壓倒性。另外我認爲在堆棧上的具體問題也不是一個壞主意。稍後找到更容易。感謝您抽出時間。 – pewpewlasers