我正在尝试在 Meteor 应用程序中保存集合。
到目前为止,我有一段简单的代码:
MyCollection = new Mongo.Collection("Dogs"); console.log(MyCollection.find({}));
当控制台日志确认其存在时,这将创建该集合。但是,它并没有在我指定的 Mongo URL 中创建它。
我在本地运行应用程序并使用以下命令指定 Mongo URL:
MONGO_URL='<MyURL>' meteor
该字符串的工作方式似乎是当我将用户注册到应用程序时,创建了用户集合以及指定数据库中的meteor_accounts_loginServiceConfiguration集合。
但是,用于创建集合“Dogs”的代码 - 附加到按钮单击 - 无法在数据库中创建新集合,但它正在其他地方创建。
我只能假设这是在 Meteor 提供的本地 Mongo 中创建的?
此外,我尝试使用以下内容设置我的 settings.json 文件:
{
"galaxy.meteor.com": {
"env": {
"MONGO_URL": "<MongoURL>"
}
}
}
并在部署期间将应用程序指向它。这似乎也起到了创建新用户更新我的数据库中的“用户”集合的作用。但是,问题仍然存在,即未在我指定的 Mongo 数据库中创建“Dogs”集合。
有人知道为什么会出现这种情况吗?我错过了什么?
非常感谢您的帮助,
G
更新
我尝试过这个方法:
var database = new MongoInternals.RemoteCollectionDriver("<mongo url>");
MyCollection = new Mongo.Collection("collection_name", { _driver: database });
我在这里找到的:Using Multiple Mongodb Databases with Meteor.js
但这也无法在我的 MongoDB 中创建任何集合。
另一更新
看了这个问题后:
https://forums.meteor.com/t/how-to-view-collection-contents-using-console-log/23852/12
我尝试了以下方法:
我创建了一个名为 server 的文件夹,并在其中创建了一个名为 main.js 的文件,其中包含以下内容:
const Tasks = new Mongo.Collection('tasks');
Tasks.insert({_id: 'my-todo'});
if (Meteor.isServer) {
// This code only runs on the server
Meteor.publish('tasks', function() {
return Tasks.find();
});
}
在客户端的应用程序中,我将以下代码添加到我的 JS 文件中:
if (Meteor.isClient) {
Meteor.subscribe('tasks');
}
根据帮助论坛,这应该可行。
它部分工作 - 在我指定的 Mongo URL 中创建任务集合并将任务插入其中。
但是,我现在不知道如何在客户端显示它。
有什么建议吗?
谢谢!:)
最佳答案
你是说你正在从客户端写入数据库吗?如果是这种情况,请确保您允许客户端写入,或者最好在服务器上创建一个写入数据库的方法,然后您的客户端调用该方法。
我认为正在发生的事情是它是在客户端的 minimongo 实例上写入的,并且没有与服务器上的数据库同步。
关于javascript - Meteor - 集合未保存到指定的 Mongo URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45162832/