2012-08-10 16 views
10

Ben Bir hesaplanmış alanı bir MongoDB sorgusundan döndürmek mümkün mü? SQL

SELECT myNum, (myNum+1) as `increment` FROM myTable 

etkili bir keyfi matematik ve diğer fonksiyonlar yapıyor ve sonuçta bir alan olarak bu döndürme gibi bir şey yapabiliriz. MongoDB ile aynı şey yapılabilir mi?

db.test.find({}, {_id:1, myNum:1, increment:function() { return this.myNum + 1;}}); 

Beklediğim gibi bir "artış" alanı döndürmez.

Bu konuyla ilgili bulabildiğim diğer tüm sorular, GROUPed sorguları ile ilgilidir; Sadece getirildiğinde belgeye "sanal" alan ekliyorum (istemci tarafı hesaplanıyor mu?). Alternatif olarak, bu sorun bir "azaltma" olmaksızın bir "harita" gibi görünmektedir; her satırın kendi hesaplanan alanı vardır. Bir harita işlevinin sonucunu sonuç/imleç olarak döndürmenin herhangi bir yolu var mı?

cevap

11

MongoDB 2.2'deki yeni , $project işleci aracılığıyla hesaplanan alanları eklemenizi sağlar. Bu keyfi işlevleriyle aynı değildir, çünkü supported operators'u kullanmanız gerekir, ancak çok iyi bir esneklik sağlar.

MongoDB shell version: 2.2.0-rc0 

> db.test.insert({_id:123}); 

> db.test.insert({_id:456}); 

> db.test.aggregate(
    { $project : { 
     _id : 1, 
    'myNum': { $add: [ "$_id", 1]} 
    }} 
) 
{ 
    "result" : [ 
     { 
      "_id" : 123, 
      "myNum" : 124 
     }, 
     { 
      "_id" : 456, 
      "myNum" : 457 
     } 
    ], 
    "ok" : 1 
} 
+0

Eh umut verici görünüyor:

İşte yeni myNum alana _id s artan senin örneğidir. Her ne kadar dokümantasyon 2.1 versiyonunu bu özellik ile ilk versiyon olarak listeler, 2.2 değil. Maalesef '$ count' fonksiyonuna sahip değildir; benim gerçek dünyam için, bir alt belge dizisi üzerinde bir sayı yapmalıyım. Bu ve Fedora 16 reposunun sadece şu anda 2.0 var, bu yüzden bu istemci tarafı – MidnightLightning

+1

@MidnightLightning'i yapmak zorunda kalabilirim: toplama çerçevesinin ilk olarak 2.1.x geliştirme sürümlerinde göründüğü doğrudur. 2.2.0 bu özellik ile kararlı/üretim sürümü olacak. 2.2.0rc0, Temmuz ortasından beri [mongodb.org/downloads](http://www.mongodb.org/downloads] adresinden edinilebilir. Haritanın/tekil bir belgeden hesaplanan bir alan örneğinize ulaşamazsınız, çünkü harita belirli bir anahtar için birden fazla belge yaymadıkça küçült() işlevi çağrılmaz. – Stennie

+0

@MidnightLightning: [MongoDB 2.2.0 üretim sürümü] 'nin (http://docs.mongodb.org/manual/release-notes/2.2/) Ağustos 2012'den beri kullanıma sunulduğuna dikkat edin. – Stennie

İlgili konular