繁体   English   中英

流星-集合未保存到指定的Mongo URL

[英]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提供的一些非常有用的帮助。

文件结构已进行了一些更改,现在包含以下文件夹和文件:

  • 进口/ task.js
  • 客户端/ main.js
  • 服务器/ main.js

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM