【问题标题】:meteor add new data to existing collection流星将新数据添加到现有集合
【发布时间】:2016-04-26 03:03:47
【问题描述】:

我目前正在 Meteor 中开发一个应用程序,在该应用程序中,我从 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"},
	{data: "stimmen", title: "Stimmen"},
	{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"},
	  {vname: "Hans", nname: "Berger" ,standort: "TGM", stimmen:"90", anmerkung:"nichts"},
	  {vname: "Sepp", nname: "Hund" ,standort: "TGM", stimmen:"30", anmerkung:"nichts"},
	  {vname: "Franz", nname: "Kross" ,standort: "TGM", stimmen:"940", anmerkung:"nichts"},
	  {vname: "Miriam", nname: "Mayer" ,standort: "TGM", stimmen:"20", anmerkung:"nichts"},
	  {vname: "Sandra", nname: "Meier" ,standort: "TGM", stimmen:"12", anmerkung:"nichts"},
      ];
    _.each(books, function (book) {
      Books.insert(book);
    });
  }
});

这是 Meteor 运行应用程序时我的 cmd 的样子,我猜 autopublish 错误是有意义的,但我不知道如何使用这些信息。

【问题讨论】:

    标签: javascript html mongodb meteor tabular


    【解决方案1】:

    尝试使用写命令 Bulk API,它允许执行批量插入操作,这些操作只是服务器顶部的抽象,它们使构建批量操作变得容易。这些批量操作主要有两种形式:

    • 有序批量操作 - 这些操作按顺序执行所有操作,并在第一次写入错误时出错。
    • 无序批量操作 - 这些操作并行执行所有操作并汇总所有错误。无序批量操作不保证执行顺序。

    要使用批量 api,您需要通过 Mongo.Collection 上的 rawCollection 和 rawDatabase 方法获取对 npm 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
                    });
                }
    
            }
    
        });
    }
    

    【讨论】:

    • 嘿,感谢您的快速回答,我按照您在上面告诉我的方式编写了代码,但似乎没有帮助。似乎它会自动加载数据库条目并将它们放在启动时的列中。有没有类似 updateOnStartup() 或 refresh() 方法可以用来解决这类问题?
    猜你喜欢
    • 1970-01-01
    • 2016-09-03
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 1970-01-01
    相关资源
    最近更新 更多