2016-01-20 72 views
3

我目前正在從事一個流星應用程序,我從MongoDB的數據集中讀取數據,其中我當然會將數據放入數據中,並將此數據保存到表格表中。 但問題是,應用程序第一次啓動後,數據不會刷新表中,只有表頭刷新,而不是條目。 這是我目前擁有的代碼。流星將新數據添加到現有集合

//common.js 
 
//code shared between client and server 
 

 
Books = new Mongo.Collection("user"); 
 

 
TabularTables = {}; 
 

 
Meteor.isClient && Template.registerHelper('TabularTables', TabularTables); 
 

 
TabularTables.Books = new Tabular.Table({ 
 
    name: "wahltable", 
 
    collection: Books, 
 
    columns: [ 
 
    {data: "vname", title: "Vorname"}, 
 
    {data: "nname", title: "Nachname"}, 
 
    {data: "standort", title: "Standort"}, 
 
\t {data: "stimmen", title: "Stimmen"}, 
 
\t {data: "anmerkung", title: "Anmerkung"} 
 

 
    ] 
 
}); 
 

 

 
//app.js from the server 
 
Meteor.startup(function() { 
 
    if (Books.find().count() === 0) { 
 
    var books = [ 
 
     {vname: "Anna", nname: "Muster" ,standort: "Das Modul", stimmen:"4", anmerkung:"nichts"}, 
 
     {vname: "Peter", nname: "Meier" ,standort: "BMHS", stimmen:"45", anmerkung:"nichts"}, 
 
     {vname: "Max", nname: "Muster" ,standort: "BMHS", stimmen:"66", anmerkung:"nichts"}, 
 
     {vname: "Moritz", nname: "Kaiser" ,standort: "BMHS", stimmen:"90", anmerkung:"nichts"}, 
 
     {vname: "Niklas", nname: "König" ,standort: "BMHS", stimmen:"123", anmerkung:"nichts"}, 
 
     {vname: "Victoria", nname: "Berger" ,standort: "TGM", stimmen:"90", anmerkung:"nichts"}, 
 
\t {vname: "Hans", nname: "Berger" ,standort: "TGM", stimmen:"90", anmerkung:"nichts"}, 
 
\t {vname: "Sepp", nname: "Hund" ,standort: "TGM", stimmen:"30", anmerkung:"nichts"}, 
 
\t {vname: "Franz", nname: "Kross" ,standort: "TGM", stimmen:"940", anmerkung:"nichts"}, 
 
\t {vname: "Miriam", nname: "Mayer" ,standort: "TGM", stimmen:"20", anmerkung:"nichts"}, 
 
\t {vname: "Sandra", nname: "Meier" ,standort: "TGM", stimmen:"12", anmerkung:"nichts"}, 
 
     ]; 
 
    _.each(books, function (book) { 
 
     Books.insert(book); 
 
    }); 
 
    } 
 
});


CMD Snip

這是我的CMD的外觀,而流星正在運行的應用程序一樣,我猜的自動發佈錯誤是有意義的,但我不知道如何使用這個信息。

回答

1

嘗試使用寫命令Bulk API,允許批量插入操作,只須在服務器之上的抽象的執行,他們可以很容易地建立批量操作。這些批量操作來主要有兩種形式:

  • 有序批量操作 - 這些操作執行所有的操作,以便和錯誤出在第一寫入錯誤。
  • 無序批量操作 - 這些操作並行執行所有操作並彙總所有錯誤。無序批量操作不保證執行順序。

要使用的大宗原料藥,你需要獲得通過的Mongo.Collection rawCollection和rawDatabase方法故宮MongoDB的驅動程序收集和數據庫對象的原始訪問。

下面演示了這種方法:

Books = new Meteor.Collection('books'); 

if (Meteor.isServer) { 
    Meteor.startup(function() { 
     if (Books.find({}).count() === 0) { 
      var bulkOp = Books.rawCollection().initializeUnorderedBulkOp(), 
       counter = 0, 
       books = [...]; // the books data array, shortened for brevity 

      _.each(books, function (book) { 

       bulkOp.insert(book); 

       counter++; 
       if (counter % 1000 == 0) { 
        // Execute per 1000 operations and re-initialize every 1000 update statements 
        bulkOp.execute(function(e, rresult) { 
         // do something with result 
        }); 
        bulkOp = Books.rawCollection().initializeUnorderedBulkOp(); 
       } 
      }); 

      // Clean up queues 
      if (counter % 1000 != 0){ 
       bulkOp.execute(function(e, result) { 
        // do something with result 
       }); 
      } 

     } 

    }); 
} 
+0

嘿,感謝您的快速回答,我寫我的代碼就像你告訴我之上,但似乎沒有幫助。它似乎會自動加載數據庫條目並在啓動時將它們放入列中。 有沒有像我可以用這種問題的updateOnStartup()或refresh()方法? – dkocsi