[英]Meteor - Collections not saving to specified Mongo URL
我正在尝试将集合保存在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 });
在这里找到的内容: 与Meteor.js一起使用多个Mongodb数据库
但这也无法在我的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实例上编写的,并且未与服务器上的数据库同步。
该问题现已解决-感谢Rob Fallows提供的一些非常有用的帮助。
文件结构已进行了一些更改,现在包含以下文件夹和文件:
行export const Tasks = new Mongo.Collection('tasks');
位于imports / task.js文件中,因为它需要在客户端和服务器端都执行。 然后,发布和订阅开始起作用,因为客户端上的(minimongo)集合将与实际的数据库集合同步。
所以现在文件看起来像这样:
task.js ...
// imports/Tasks.js
import { Mongo } from 'meteor/mongo';
export const Tasks = new Mongo.Collection('tasks');
客户端/ main.js ...
import { Tasks } from '/imports/tasks';
Meteor.subscribe('tasks');
window.Tasks = Tasks;
服务器/ main.js ...
import { Tasks } from '/imports/tasks';
Tasks.insert({_id: 'my-todo'});
// This code only runs on the server
Meteor.publish('tasks', function() {
return Tasks.find();
});
当使用MONGO_URL='<MyURL>' meteor
命令从命令行为应用程序提供服务时,将在MongoDB数据库中显示任务节点。
现在,当控制台命令Tasks.find().fetch();
在浏览器的客户端输入,返回数据:
完整的答案可以在这里找到
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.