2016-03-18 19 views
1

Gömülü belgelerin içindeki belirli bir anahtar için değer sayılarını sorgulamak mümkün mü? İşte Gömülü dokümanlar için Mongodb grup sorgusu

Dokümanım:

{ "_id" : 1, "drives" : [ {"fw": "A"}, {"fw": "B"} ] } 
{ "_id" : 2, "drives" : [ {"fw": "B"}, {"fw": "C"} ] } 
{ "_id" : 3, "drives" : [ {"fw": "A"}, {"fw": "C"} ] } 
{ "_id" : 4, "drives" : [ {"fw": "A"}, {"fw": "D"} ] } 

Ve "fw" sayısını almak istiyorum:

Çıktı:

sayımları: { "A": 3, "B ": 2," C ": 2," D ": 1}

+0

Evet, bu mümkündür. Benzer olanları gruplandırabilir ve sayım kümelerini toplu sorgulama boruları kullanarak gerçekleştirebilirsiniz. Özellikle, $ grubu. Bir şans ver. [docs] (https://docs.mongodb.org/manual/reference/operator/aggregation-pipeline/) – jmugz3

+0

Örneğindeki JSON geçersiz, "sürücüler" in bir dizi nesne olması anlamına gelmediğini varsayalım, diziler nesnesi? –

+0

@JoachimIsaksson Düzeltildi. işaret ettiğin için teşekkürler. –

cevap

3

Toplama bunu yapacaktır. İlk $unwind dizisi, fw değeri başına bir satır almak için fw değerini ve fw değerini 1 fw değeri başına almak için bir $sum değeri ile $group;

db.test.aggregate({ $unwind: "$drives" }, 
        { $group: { _id: "$drives.fw", cnt: {$sum:1} } }) 

# { "_id" : "D", "cnt" : 1 } 
# { "_id" : "C", "cnt" : 2 } 
# { "_id" : "B", "cnt" : 2 } 
# { "_id" : "A", "cnt" : 3 } 
+0

Bu toplam sayımı verir, benzersiz sayımı elde etmek mümkün mü? –

+1

Kötü durumum iyi görünüyor. –

+0

yorumunuzun geçerli olmadığını fark ederseniz silebilirsiniz. Cevap doğruysa, kabul etmelisiniz. –