2016-03-23 20 views
2

クライアントサイドのMeteorコレクションの配列内の特定の要素を照会しようとしていますが、Minimongoは$演算子をサポートしていません。配列内の特定の要素だけを返すようにクエリをフィルタリングする代替手段はありますか?

私のコレクションは、このように構成されている:私は、ID「foo」というの配列にだけオブジェクトを返すクエリを記述しようとしています

{ 
    "userID": "abc123", 
    "array": [ 
    { 
     "id": "foo", 
     "propA": "x", 
     "propB": "y" 
    }, 
    { 
     "id": "bar", 
     "propA": "a", 
     "propB": "b" 
    } 
    ] 
} 

。モンゴでは、そのクエリは、この次のようになります。これは、エラーがスローされますので、

collection.find({ 
    "userID": "abc123", 
    "array.id": "foo" 
}, { 
    "array.$": 1 
}); 

しかし、Minimongoは予測で$演算子をサポートしていません。 $ elemMatchを使って同様の構造化クエリを試してみましたが、 solution described hereを試みましたが、私がしようとしていることを達成できません。

この配列のMinimongoで1つの要素をクエリする方法はありますか?

答えて

3

findWhereを使用すると、配列内の最初に一致するオブジェクトを抽出できます。このようなものを試してみてください:

// Find all documents matching the selector. 
const docs = Collection.find({ userId: 'x', 'array.id': 'y' }).fetch(); 

// For each document, find the matching array element. 
for (let doc of docs) { 
    let obj = _.findWhere(doc.array, { id: 'y' }); 
    console.log(obj); 
} 
+0

私は実際にfind()。fetch()を使って、探していたものを正確に使いました。答えを編集すると正しいとマークします。 –

+0

@JoshVickerson提案された編集を見てください。あなたが単一または複数の文書の要素を検索しているのかどうかはまだ分かりません。 –

+0

私は単一の文書の中に要素を探しています。私の使用例では、userIdは一意であることが保証されているため、findは1つの文書にしか一致しません。私はそのドキュメントの配列から単一の要素が必要です。 –

関連する問題