2013-08-30 5 views
6

Koleksiyonumu CSV veya XLSX dosyasına bir düğme ile (log-in sistemi yok) vermek istiyorum.MongoDB koleksiyonunu CSV veya XLSX'e Meteor/JavaScript ile dışa aktarma

Meteor/JavaScript ile bunu yapmanın basit bir yolu var mı?

+1

Daha spesifik olmalısınız. Ve koleksiyonunuzun dayanıklılığına bağlıdır. Başlangıç ​​için bunu araştırabilirsiniz: http://jsfiddle.net/sturtevant/vUnF9/ –

+0

En son cevabı tekrar gözden geçirip, bu konudaki görüşlerinizi bildirmek isterim. –

cevap

10

Tarayıcı tarafında Blob oluşturmak ve daha sonra bir indirme olarak sunmak için https://github.com/eligrey/FileSaver.js gibi bir şey kullanabilirsiniz.

istemci tarafı js

var yourCSVData = "Col1Row1,Col2Row1\nCol1Row2,Col2Row2"; 

var blob = new Blob([yourCSVData], 
        {type: "text/csv;charset=utf-8"}); 
saveAs(blob, "yourfile.csv"); 

o zaman çok kolay indirilen dosya var gerekir yourCSVData içine CSV oluşturun.

CSV'nizi oluşturmak için bazı özel javascript kullanmanız gerekir. Mongodb ile olan şey, her bir belgenin satır/sütun tipi belgeler için çok kötü olan farklı bir yapıya sahip olmasıdır.

Bunu bir şablon gayet iyi ihracat sistemini

{{#each documents}} 
    "{{field1}}","{{field2}}"<br/> 
    {{/each}} 

xlsx biçimi yapar

var data = MyCollection.find().fetch(); 
var yourCSVData = JSON2CSV(data); 
+0

mükemmel cevap! –

+0

Tam koleksiyona abone olmam gerekiyorsa ve indirme işleminin yapıldığı sayfada yaptığım gibi değil. Küçük abonenin nedeni, koleksiyonun boyutu için sayfayı duraklatır. – mjwrazor

0

yardımcı olabilecek & yukarıdaki yorumlar (http://jsfiddle.net/sturtevant/vUnF9/) Yvegeniy tarafından verilen keman gibi bir şey kullanabilirsiniz çirkin ise kendini aynı tedaviye borç verir.

Bir HTML sayfası oluşturmak gerçekten aynı şeydir. Bir pdf oluştururken. Ya da SQL üretiyor. Meteor 1.5 ve bugün itibariyle en son Meteor paketleri son düşünüldüğünde

1

, Aşağıdaki Mongo DB Koleksiyon CSV(a çekicilik gibi MS Office tarafından da okunabilir.)

dönüştürmek için izlemeniz gereken adımlar şunlardır Sen önce altındaki herhangi adımlara yüklenmiş paketler aşağıda olması gerekir
  1. ,

    pfafman:filesaver 
    harrison:papa-parse 
    
  2. basit Blaze Şablon düşünün (Yani Aşağıda bir indirme bağlantı ile MyTemplate.html),

    <template name="MyTemplate"> 
        <body> 
        <a href="#" role="button" class="download">Download</a> 
        </body> 
    </template> 
    
  3. Benzer şekilde olaylar işleyicisi olabilir (MyTemplate.js) 'de "İndir" bağlantısını tıklayın işlemek için yani olay,

    Template.MyTemplate.events({  
        'click .download': function (event, template) { 
         var data = MyCollection.find({}).fetch(); 
         var csv = Papa.unparse(data); 
         var blob = new Blob([csv], {type: "text/csv;charset=utf-8"}); 
         saveAs(blob, "MyCollection.csv"); 
        } 
    }); 
    

NOT - İndirme bağlantısına tıkladığınızda, indirmeye devam etmeniz için herhangi bir açılır pencere veya iletişim kutusu alamazsınız, bunun yerine otomatik olarak sizin için sessizce indirilir.