【问题标题】:Meteor MongoDB Collection Not Accessible to Meteor publishMeteor MongoDB 集合无法访问 Meteor 发布
【发布时间】:2015-02-02 22:52:52
【问题描述】:

我已将数据导入流星 mongodb 数据库。这是我所做的: 通过

运行流星应用程序

$ yourMeteorAppDir 流星

在一个终端和另一个终端启动 mongodb 运行通过

$mongod

启动另一个终端并运行以下命令将数据导入流星应用的数据库:

$ mongoimport -h localhost:3001 -d meteor -c collectionNameHere

但是,在从 json 文件导入文档后,我发现我的 Meteor 应用程序没有访问该集合。具体来说,当我尝试通过以下方式发布集合时:

Meteor.publish('collectionNameHere', function() 
   {return collectionNameHere.find();
});

我看到了:

来自子 ci9tk9AsFeyngHWwE ReferenceError 的异常:collectionNameHere 未定义 I20141203-07:15:18.436(-5)?在 null._handler (app/server/collectionName.js:9:14) I20141203-07:15:18.436(-5)?在 MaybeAuditArgumentChecks (packages/ddp/livedata_server.js:1599) I20141203-07:15:18.436(-5)?在 _.extend._runHandler (packages/ddp/livedata_server.js:943) I20141203-07:15:18.437(-5)?在 _.extend._startSubscription (packages/ddp/livedata_server.js:769) I20141203-07:15:18.437(-5)?在 _.extend.protocol_handlers.sub (packages/ddp/livedata_server.js:582) I20141203-07:15:18.437(-5)?在 packages/ddp/livedata_server.js:546

我可以通过meteor mongo在mongo中看到集合,也可以通过find查询。我是否需要从应用程序而不是通过导入创建 MongoDB 集合?

【问题讨论】:

  • 您需要一个collectionNameHere = new meteor.Collection('collectionNameHere') 对客户端和服务器都可用的地方。
  • 感谢 user3557327。我在我的:lib/collections/collectionName.js 文件夹中确实有它
  • 我可能需要将return collectionNameHere.find()改为return collectionNameHere.find({});
  • 该合集仍然不可用。
  • 我所做的是通过 $ myApp reset 重置 MongoDB,然后添加文档以检查集合,如果没有文档,则从 fixture.js 文件中插入它们。

标签: javascript node.js mongodb meteor


【解决方案1】:
  1. 在您的项目根目录中创建一个新的database_dump.json

  2. 然后打开您的终端并将目录更改为您的项目根目录。例如cd /var/www/html/meteor/myapp/

  3. 输入mongoimport --db meteor --collection mynewcollection --type json --headerline --file '/var/www/html/meteor/myapp/database_dump.json' -h 127.0.0.1:3001 --jsonArray

  4. 新的 Mongodb 集合

    // Lib 
    MyNewCollection = new Meteor.Collection('mynewcollection');
    
  5. 发布您的新收藏。

    // Server
    Meteor.publish("mynewcollection", function() {
      return MyNewCollection.find({});
    });
    
  6. 订阅它

    // Client
    Meteor.subscribe("MyNewCollection");
    
  7. 与 Meteor 玩得开心

【讨论】:

  • 你必须通过你的终端(!)执行mongoimport,而不是通过mongo shell(mongod)。这很重要。 :)
  • 罗恩,这是我正在做的一个副业。我还有其他要从以前的 Rails 项目中导入的集合。我会继续尝试这个。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
相关资源
最近更新 更多