2013-04-14 30 views
0

userLink_titles = Entries.find({ _id:"bxSbMgszYxbCqDonF"})蒙戈發現選擇導致不匹配的結果是收益

回報:

docs: Object 
    CBqHrJvTE8xz7u2Rz: Object 
     _id: "CBqHrJvTE8xz7u2Rz" 
     author: "AHSwfYgeGmur9oHzu" 
    Q8m7PMbQr62E3A73f: Object 
     _id: "Q8m7PMbQr62E3A73f" 
     author: "AHSwfYgeGmur9oHzu" 
    bxSbMgszYxbCqDonF: Object 
     _id: "bxSbMgszYxbCqDonF" 
     author: "AHSwfYgeGmur9oHzu" 

正如你可以看到它返回正確的文件,但它也返回不正確的文件。

findOne:userLink_titles = Entries.findOne({ _id:"bxSbMgszYxbCqDonF"})作品如預期,僅返回正確的文件。

我會使用FindOne除了最終目的是使_id選擇一個陣列,從而找到將返回文檔數組中匹配_id選擇所有文件。

積分:

比方說,我想找回一組文章,在這些條款的引用(該文章在他們的文章收集_ids)已經被保存在用戶採集的標題。

所以有效地我會檢索用戶採集的文章引用,並使用這些文獻檢索文章從本刊收集頭銜。

會什麼碼/僞代碼看起來象是什麼?像下面的內容(我假設下面是用於查詢/檢索記錄的一些最佳做法完全私生子)

user_profile = Users.findOne({username : "Frank"}); 
user_saved_articles_ids = user_profile.findOne({saved_articles_ids}); 
userLinks = Articles.find({ _id:user_saved_articles_ids}); 
userLinksTitles = Articles.find({titles}); 
+0

您搜索'_id'在文檔的頂級配套。從結果看來,你是指不正確的文件似乎被嵌入'docs'陣列(_id,筆者對)? – Stennie

+0

我主持一個例子網站瀏覽:http://protobrewui.meteor.com 查找操作我提到是我從控制檯運行: 對於託管網站,如果你在控制檯中運行: userLink_titles =條目.find({_id:「HpjkkBJXWTxFEgrc9」})我想你只會得到章程回來。相反,正如你所說的,它在一個較高的級別上匹配。然後,我該如何才能檢索與選擇器_id匹配的文檔部分,或者在此類查詢中不合法? – funkyeah

回答

1

如果要檢查在控制檯的查詢結果,請使用Entries.find(...).fetch()

Entries.find()回報cursor,其是用於有效地呈現列表,以便只改變項需要重新呈現的構建體。從您使用{{#each}}的助手中返回遊標將導致更具響應性的應用程序。

2

對於那些有興趣在獎金問題,你想MongoDB的$in operator

如果這將在發佈方法中使用的服務器上,那麼你可能想看看publish-with-relations

類似下面的功能將是獲取信息的有效途徑。它會對數據庫進行兩次調用。使用fields參數防止從db和web服務器之間發送不必要的數據。

/** 
* Titles of a User's saved articles 
* 
* @method getSavedTitles 
* @param {String} username 
* @return {Array} a list of article titles 
*/ 
function getSavedTitles (username) { 
    var user, 
     ids, 
     linkedArticles, 
     titles; 

    user = Users.findOne({username: username}, 
         {fields:{ _id:0, profile:1 }}); 

    if (!user || !user.profile) { 
    throw new Meteor.Error(500, 'Missing user profile'); 
    } 

    ids = user.profile.savedArticleIds; 

    if (!ids || !_.isArray(ids)) { 
    throw new Meteor.Error(500, 'Missing saved article ids'); 
    } 

    linkedArticles = Articles.find({_id: {$in: ids}}, 
         {fields:{ _id:0, title:1 }}); 

    titles = _.pluck(linkedArticles.fetch(), "title"); 

    return titles; 

} // end getSavedTitles 
+0

我希望我能標記兩個右的答案......在這裏發表您的回答,我給它的愛:HTTP://計算器。COM /問題/ 16137089/MongoDB的米JS-如何對搜索-IF-A-值是-IN-A-文件 – funkyeah