2015-02-26 16 views
5
Ben $ maçı parametrelerini değiştirmek Aşağıdaki kodu

Mongo DB toplama sonuçlarını varolan bir koleksiyona nasıl eklerim?

db.dados_meteo.aggregate([ 
        { $match : { "POM" : "AguiardaBeira" } }, 
        { $project : { 
        _id : { $concat: [ 
         "0001:", 
         { $substr: [ "$DTM", 0, 4 ] }, 
         { $substr: [ "$DTM", 5, 2 ] }, 
         { $substr: [ "$DTM", 8, 2 ] }, 
         { $substr: [ "$DTM", 11, 2 ] }, 
         { $substr: [ "$DTM", 14, 2 ] }, 
         { $substr: [ "$DTM", 17, 2 ] } 
         ] }, 
        "RNF" : 1, "WET":1,"HMD":1,"TMP":1 } }, 
        { $out : "dados_meteo_reloaded" } 
       ]) 

Ama her seferinde kullanarak mevcut Mongo DB koleksiyonunda birkaç eklenenleri gerçekleştirmek ve yeni bir toplamını yapmaya çalışıyorum

Mongo DB önceki belgeleri siler ve ekler yeni sonuç

Yardımcı olabilir misiniz?

+0

Olası kopyası [Sonuç nasıl toplanır ve bir koleksiyonda birleştirilir?] (Https://stackoverflow.com/questions/20976569/how-to-aggregate-and-merge-the-result-into-a- toplama) – NatNgs

cevap

6

Kısa cevap "yapamazsın" dir: $ dışarı operasyonu ile belirtilen koleksiyon zaten var

, o zaman toplama tamamlanmasıyla, $ dışarı sahne atomik mevcut yerini yeni sonuç koleksiyonu ile koleksiyon. $ Out işlemi, önceki koleksiyonda var olan herhangi bir endeksi değiştirmez. Birleştirme başarısız olursa, $ out işlemi önceden var olan koleksiyonda hiçbir değişiklik yapmaz.

    : Çözüm olarak

, (yine ideal olmayan hangi) bir kaç yoldan biriyle, sadece toplama sonra bir "kalıcı" koleksiyonuna $out tarafından belirtilen toplama belgeyi kopyalayabilirsiniz Uyarı en kolay,
  • copyTo(). Küçük sonuçlar için başka birini kullanmayın.
  • Kullanım JS:
  • +14

    ekleyecek bir yolu olmadıklarına inanamıyorum. ve bu milyonlarca dolarlık bir fon var mı? acıklı. – foreyez

    +1

    Ori, cevabın iyi görünüyor. Onu düzenlemek ve bu seçeneği eklemek istediğiniz olabilirsiniz http://stackoverflow.com/a/37433640/2834978. db.col1.insert (db.col2.aggregate (...). toArray()) –

    1

    O değil güzel şey hiç ama (bir proses sonrası arşivinde/ekleme işlemi itibaren) başka alternatif sözdizimi olarak ... db.out.find().forEach(function(doc) {db.target.insert(doc)})

  • Kullanım mongoexport/mongoimport

    db.targetCollection.insertMany(db.runCommand(
     
    { 
     
        aggregate: "sourceCollection", 
     
        pipeline: 
     
        [ 
     
         { $skip: 0 }, 
     
         { $limit: 5 }, 
     
         { 
     
          $project: 
     
          { 
     
           myObject: "$$ROOT", 
     
           processedDate: { $add: [new ISODate(), 0] } 
     
          } 
     
         } 
     
        ] 
     
    }).result)

    Bu forEach varyantı kıyasla durumunu emin değilim, ama fi okumak daha sezgisel.