私はMongoDBを初めて使用しており、クエリされたデータを表に表示するために流星テンプレートを使用したいと考えています。Meteor/MongoDB - オブジェクト配列から単一の要素を取得してテーブルに表示する方法は?
最初の文書:
{
"_id" : "A-89273498720",
"myItems" : [
{
"itemId" : "item_1",
"username" : "Homer",
"purpose" : "justBecause",
},
{
"itemId" : "item_2",
"username" : "March",
"purpose" : "justBecause2",
},
{
"itemId" : "item_3",
"username" : "Maggie",
"purpose" : "justBecause3",
}
]
}
第2の文書:
私はこのような構造で "infoData" という名前のコレクションを持っている
{
"_id" : "B-564548461117",
"myItems" : [
{
"itemId" : "item_4",
"username" : "Lisa",
"purpose" : "justBecause4",
},
{
"itemId" : "item_5",
"username" : "Lisa",
"purpose" : "justBecause5",
},
{
"itemId" : "item_6",
"username" : "Bart",
"purpose" : "justBecause5",
}
]
}
今、私は同様に "のitemId" を取得する必要があります"username"と "purpose"として "itemId"をクエリ演算子として使用します。 「itemId」はユニークです。私の最初の問題は、データを取得することです。これはときので、私は必要な結果である場合
infoData.findOne(
{
'myItems.itemId': "item_2"
},
{
'_id': 0, 'myItems': {$elemMatch: {'itemId': "item_2"}}
})
私はわからないよと同じ結果を得る
infoData.findOne({"myItems.itemId": "item_2"}, {_id: 0, 'myItems.$': 1})
:たとえば、私はシングル「のitemId」フィールド「item_2」を取得するには、これを試してみましたこのクエリをJSON.stringify()に入れて、コンソールのデータを確認しました。 "item_2"フィールドと "itemId"フィールドのデータ "item_2"だけでなく、docの配列内のすべてのフィールドとオブジェクトが表示されます。後でテーブル内で反復処理できるように、クエリのitemId、userName、およびpurpose(item_2を含むオブジェクトのみ)のすべてのフィールドを取得する可能性もあります。
第2の問題は、データを表に表示する必要があることです。
だから私はこのヘルパーを書いた:
'itemInfoDisplay': function() {
if (Meteor.userId()) {
var itemInfos= infoData.findOne(
{"myItems.itemId": "item_2"}, {_id: 0, 'myItems.$': 1});
return itemInfos
}
}
、テーブル内のデータを表示したい:
{{#each itemInfoDisplay}}
{{#each myItems}}
<tr>
<td><h4>{{ itemId }}</h4></td>
</tr>
{{/each}}
{{/each}}
私はそこにコードと間違って何かがあり、またHTMLテンプレートを知っています。私は、mongoDBクエリの結果は配列ではないと思いますか?それを1つにすることは可能ですか?使用しているmongoクエリは、私のニーズに合った正しいソリューションですか?
最後に、特定の「itemId」に割り当てられたすべてのデータを取得してテーブルに表示するだけで済みます。私は何か助けていただければ幸いです。
多くのおかげで、私はそれが少なくとも何とかテーブルにデータを表示するために来るまでは動作すると思います。あなたの最初と2番目のソリューションは何かを返します。これでテーブルの '[object Object]'は見ることができますが、それでも実際の値は表示されません。テンプレートを書き直す必要がありますか、または何らかの方法で取得したデータのタイプを変更する必要がありますか? – Jaybruh
編集:テンプレートを{{itemInfosDisplay}}に変更しましたが、{[#each}}はありません。その場合は '[object Object]'のみが返されるためです。元のテンプレートでは、表には何も表示されません。 – Jaybruh
{{#each myItems}}を削除するだけです。したがって、あなたのテンプレートは次のようになります: {{#e item itemInfosDisplay}} {{itemId}} {{/ each}} 新しいヘルパーがmyItemsの配列を直接返していることを覚えておいてください。[{itemId:XXX、username: XXX、目的:XXX}、{itemId:YYY、ユーザー名:YYY、目的:YYY})。返される配列にmyItemsプロパティはありません。返された正確なデータ構造を表示したい場合はconsole.log(items)を使用し、それに基づいてブレーズテンプレートを作成することができます。 – Hashcut