2016-03-23 16 views
2

İstemci tarafında Meteor koleksiyonundaki bir dizinin içindeki belirli bir öğeyi sorgulamaya çalışıyorum, ancak Minimongo $ operatörünü desteklemiyor. Sorgumu filtrelemek için bir alternatif var mı?

Benim koleksiyonu bu gibi yapılandırılmıştır: Ben id "foo" ile dizide sadece nesnesi döndüren bir sorgu yazmaya çalışıyorum

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

. Mongo olarak, bu sorgu bu olacaktır: Bu bir hata atar böylece

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

Ancak Minimongo projeksiyonlarda $ operatörü desteklemez. Benzer şekilde, $ elemMatch kullanarak yapılandırılmış sorgular denedim ve solution described here'u denedim ama ne yapmaya çalıştığımı başaramıyor.

Minimongo ile bu dizideki bir öğe için sorgulamanın alternatif bir yolu var mı?

cevap

3

Bir dizide ilk eşleşen nesneyi ayıklamak için findWhere10'u kullanabilirsiniz. Bunun gibi bir şey veriniz:

// 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

Aslında find(). Fetch() kullandım ve tam olarak aradığım şeyi yaptım. Cevabı düzenlerseniz, doğru bir şekilde işaretleyeceğim. –

+0

@JoshVickerson Önerilen düzenlemelere bir göz atın. Tek veya çok sayıda belgede bir öğe aradığınız hâlâ açık değil. –

+0

Tek bir belgenin içinde bir öğe arıyorum. Benim kullanım durumumda, userId benzersiz olması garantilidir, bu nedenle bu bulgunun yalnızca bir belge ile eşleşmesi gerekir. O zaman bu belgedeki diziden tek bir öğeye ihtiyacım var. –