2017-05-16 8 views
0

これは流星の中で多少の関係が単純になっていると思われますが、私はそれを働かせることができないので、何かが欠けているに違いありません。あるコレクションの整数を別のコレクションと一致させ、多対多の関係を作成する方法。

は私がリブログ呼ばれるコレクションを持っており、それにdescoveredは画像enter image description here

が、私はポストのコレクションである投稿と呼ばれる第二のコレクションを持って見ると呼ばれる整数の配列であり、これらの投稿にはIDがあります。私はポストリブログコレクションの間の多くの関係に多くを作成する第二の画像

enter image description here

を見てみましょう。私はからマッチした投稿のみを表示できるようにポストから

id: 9

コレクション:つまり、私は、リブログコレクションから整数

descovered: 9

をマッチさせたいですのブログコレクション。これはもちろん、投稿のタイトルやその他の属性を表示することができます。

これは、これは非常に簡単なものだが、それは

をworingないですし、私のHTMLはそれとして、この

<template name="reblogging"> 
{{#each descovered }} 
<ul class=""> 
    <li> 
    <h5 class="">{{title.rendered}}</h5> 
    </li> 
</ul> 
{{/each}} 
</template> 

答えて

0

のようなものですので、私は何かが欠けする必要があり、私のjs

Template.reblogging.helpers({ 
descovered() { 
    var id = FlowRouter.getParam('_id'); 

    //fetch the reblog collection contents 

    var rebloged = reblog.find().fetch(); 

    //log below is showing that the fetch is successful because i can see the objects fetched in console 

    console.log(rebloged); 

    //create the relationship between the posts collection and the reblog collection 

    var reblogger = posts.find({ 
    id: { 
     $in: rebloged 
    } 
    }).fetch(); 

    //nothing is showing with the log below, so something is going wrong with the line above? 

    console.log(reblogger); 
    return reblogger 
} 
}); 

です照合は正確でしたが、reblogコレクションからのデータは、REGとは別にすべてを取り除くためにREGEXで処理する必要がありました私が必要としていたものを配列に変換すると、これはうまくいった最後のコードです。それをここに残して、うまくいけば、それは将来誰かを助けるでしょう。

Template.reblogging.helpers({ 
descovered() { 
    var id = FlowRouter.getParam('_id'); 

    //fetch the reblog collection contents 

    var rebloged = reblog.find().fetch(); 

    //log below is showing that the fetch is successful because i can see the objects fetched in console 

    console.log(rebloged); 

    //turn it into a string so i can extract only the ids 
    var reblogString = JSON.stringify(rebloged).replace(/"(.*?)"/g, '').replace(/:/g, '').replace(/{/g, '').replace(/}/g, '').replace(/,,/g, ',').replace(/^\[,+/g, '').replace(/\]+$/g, ''); 
    //after have extracted what i needed, i make it into an array 
    var reblogArr = reblogString.split(',').map(function(item) { 
    return parseInt(item, 10); 
    }); 

    //create the relationship between the posts collection and the reblog collection 

    var reblogger = posts.find({ 
    id: { 
     $in: reblogArr 
    } 
    }).fetch(); 

    //nothing is showing with the log below, so something is going wrong with the line above? 

    console.log(reblogger); 
    return reblogger 
} 
}); 
1

あなたはdescovered値の配列を作成するために、カーソルの上に直接.map()を使用することができ、文字列に変換して解析する必要はありません。また、Blazeを使用しているので、配列の代わりにカーソルを返すこともできます。最初の.find()にFlowRouter _idパラメータを使用することも意図しています。あなたがしなかった場合は、あなたのヘルパーでそのparamを取得する必要はありません。

Template.reblogging.helpers({ 
    descovered() { 
    const id = FlowRouter.getParam('_id'); 
    const reblogArr = reblog.find(id).map(el => { return el.descovered });  
    return posts.find({ id: { $in: reblogArr } }); 
    } 
); 
+0

私はこれを動作させることはできません。 ** console.log(reblogArr); **は何も表示しない@Michel –

+0

'reblog.find(id).count()とは何ですか? –

関連する問題