MongoDB - Harita Azaltma

MongoDB belgelerine göre, Map-reducebüyük hacimli verileri yararlı toplu sonuçlara yoğunlaştırmak için bir veri işleme paradigmasıdır. MongoDB kullanırmapReduceharita küçültme işlemleri için komut. MapReduce genellikle büyük veri kümelerini işlemek için kullanılır.

MapReduce Komutu

Temel mapReduce komutunun sözdizimi aşağıdadır -

>db.collection.mapReduce(
   function() {emit(key,value);},  //map function
   function(key,values) {return reduceFunction}, {   //reduce function
      out: collection,
      query: document,
      sort: document,
      limit: number
   }
)

Eşleme azaltma işlevi önce koleksiyonu sorgular, ardından sonuç belgelerini anahtar-değer çiftlerini yayınlayacak şekilde eşler, bu daha sonra birden çok değere sahip anahtarlara göre azaltılır.

Yukarıdaki sözdiziminde -

  • map bir değeri bir anahtarla eşleyen ve bir anahtar / değer çifti yayınlayan bir javascript işlevidir

  • reduce aynı anahtara sahip tüm belgeleri azaltan veya gruplandıran bir javascript işlevidir

  • out haritayı azalt sorgu sonucunun konumunu belirtir

  • query belgeleri seçmek için isteğe bağlı seçim kriterlerini belirtir

  • sort isteğe bağlı sıralama ölçütlerini belirtir

  • limit iade edilecek isteğe bağlı maksimum belge sayısını belirtir

MapReduce'u kullanma

Kullanıcı gönderilerini saklayan aşağıdaki belge yapısını düşünün. Doküman, kullanıcının kullanıcı_adı ve gönderinin durumunu depolar.

{
   "post_text": "tutorialspoint is an awesome website for tutorials",
   "user_name": "mark",
   "status":"active"
}

Şimdi, bir mapReduce işlevi kullanacağız. posts tüm aktif gönderileri seçmek için koleksiyon, bunları kullanıcı_adı temelinde gruplandırın ve ardından aşağıdaki kodu kullanarak her bir kullanıcının gönderilerini sayın -

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
	
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
)

Yukarıdaki mapReduce sorgusu aşağıdaki sonucu verir -

{
   "result" : "post_total",
   "timeMillis" : 9,
   "counts" : {
      "input" : 4,
      "emit" : 4,
      "reduce" : 2,
      "output" : 2
   },
   "ok" : 1,
}

Sonuç, toplam 4 belgenin sorgu ile eşleştiğini (durum: "etkin"), eşleme işlevinin anahtar-değer çiftlerine sahip 4 belge yayınladığını ve son olarak azaltma işlevinin aynı anahtarlara sahip eşlenen belgeleri 2'ye grupladığını gösterir.

Bu mapReduce sorgusunun sonucunu görmek için bul operatörünü kullanın -

>db.posts.mapReduce( 
   function() { emit(this.user_id,1); }, 
   function(key, values) {return Array.sum(values)}, {  
      query:{status:"active"},  
      out:"post_total" 
   }
	
).find()

Yukarıdaki sorgu, her iki kullanıcının da tom ve mark aktif durumda iki gönderi var -

{ "_id" : "tom", "value" : 2 }
{ "_id" : "mark", "value" : 2 }

Benzer bir şekilde, MapReduce sorguları büyük karmaşık toplama sorguları oluşturmak için kullanılabilir. Özel Javascript işlevlerinin kullanımı, çok esnek ve güçlü olan MapReduce'u kullanır.