2012-04-18 19 views
5

Metrede günlük belge var. Veri dizisinde başka bir alt belgeyi nasıl ekleyebilir ve varsa tüm belgeyi nasıl oluşturabilirim?Mongodb yerleşik belgeyi destekliyor

 
{ 
    "key": "20120418_123456789", 
    "data":[ 
    { 
    "Meter": 123456789, 
    "Dt": ISODate("2011-12-29T16:00:00.0Z"), 
    "Energy": 25, 
    "PMin": 11, 
    "PMax": 16 
    } 
    ], 
    "config": {"someparam": 4.5} 
} 

Bu amaçla destekleyici kullanabilir miyim? Belge varsa

sonuç olacaktır: peşin

 
{ 
    "key": "20120418_123456789", 
    "data":[ 
    { 
    "Meter": 123456789, 
    "Dt": ISODate("2011-12-29T16:00:00.0Z"), 
    "Energy": 25, 
    "PMin": 11, 
    "PMax": 16 
    }, 
    { 
    "Meter": 123456789, 
    "Dt": ISODate("2011-12-29T16:15:00.0Z"), 
    "Energy": 22, 
    "PMin": 13, 
    "PMax": 17 
    } 
    ], 
    "config": {"someparam": 4.5} 
} 

Teşekkür

cevap

9

Ben ne istediğini $ addToSet komutu olduğunu düşünüyorum - Ya etmezse yalnızca bir diziye bir öğe itecektir zaten var. Şimdi

db.meters.findOne() 
{ 
    "_id" : ObjectId("4f8e95a718bc9c7da1e6511a"), 
    "config" : { 
     "someparam" : 4.5 
    }, 
    "data" : [ 
     { 
      "Meter" : 123456789, 
     } 
    ], 
    "key" : "20120418_123456789" 
} 

çalıştırın:: Ben senin ömeği kısalık için biraz daha basit hale getirdik

db.meters.update({"key" : "20120418_123456789"}, {"$addToSet": {"data" : {"Meter" : 1234}}}) 

Ve güncellenmiş sürümünü almak: yine

db.meters.findOne() 
{ 
    "_id" : ObjectId("4f8e95a718bc9c7da1e6511a"), 
    "config" : { 
     "someparam" : 4.5 
    }, 
    "data" : [ 
     { 
      "Meter" : 123456789, 
     }, 
     { 
      "Meter" : 1234 
     } 
    ], 
    "key" : "20120418_123456789" 
} 

çalıştırın aynı komuta ve sonuç değişmez. Not: özellikle bu alanın sınırsız olması ve bu şekilde güncelleştirilerek sık sık (nispeten pahalı) hareketlere neden olması durumunda, bu belgelerin çoğalması muhtemeldir. Bu durumun nasıl hafifletileceğine ilişkin fikirlere bir göz atmanız gerekir: http://www.microsoft.com/downloads/default.aspx?displaylang=tr

http://www.mongodb.org/display/DOCS/Padding+Factor#PaddingFactor-ManualPadding

+0

Bana günde 400000 addToSet ... belge başına 96 veri yapmak zorunda kalacaktır. Yavaş gibi görünüyor ... Bunu yapmak için başka yollar var mı? – hotips

+0

belirtildiği gibi, bu şekilde bir dizi diziyi büyüyerek birden fazla hamleyi tetikleyeceksiniz - bu, diziyi bir şekilde bağladığınız ve maksimum boyutunu tahmin edemeyeceğiniz sürece yavaşlamaya neden olacaktır - daha sonra buna uygun şekilde ve güncellemeler çok daha hızlı olurdu. Bunu yapamazsanız, belki de farklı bir şema düşünmeli ve verileri gömülü bir dizi yerine başka bir koleksiyonda bulundurmalısınız. –