流星客户端访问现有的 mongoDB
Posted
技术标签:
【中文标题】流星客户端访问现有的 mongoDB【英文标题】:meteor client side access to an existing mongoDB 【发布时间】:2014-02-25 17:23:16 【问题描述】:我是 Meteorjs 的新手,我正在尝试从现有的 MongoDB 中检索数据。 这是我到目前为止所拥有的:
我将环境变量 MONGO_URL 设置为 mongoDB url export MONGO_URL="mongodb://username:password@address:port/dbname"
使用以下代码创建了一个新的流星项目:
MyCollection = new Meteor.Collection('mycollection');
if (Meteor.isClient)
//Meteor.subscribe("mycollection");
console.log(MyCollection.findOne());
Template.hello.greeting = function ()
return MyCollection.findOne();
;
if (Meteor.isServer)
Meteor.startup(function ()
// code to run on server at startup
console.log(MyCollection.findOne());
);
我知道服务器端 console.log(MyCollection.findOne());
在终端上打印出正确的数据时工作。
问题出在客户端。当我在浏览器上查看页面时,数据为空白,console.log(MyCollection.findOne());
显示“未定义”。
我知道自动发布已打开,我不必从服务器端手动发布集合。
我想知道如何让客户端直接从我的外部 mongoDB 中读取。 如果您有任何建议,请告诉我!
【问题讨论】:
【参考方案1】:即使启用了自动发布,客户端启动与发布数据之间也存在延迟。在您的第一个 console.log
运行时,文档尚未完成同步,因此 findOne
将返回 undefined
。事实证明这没什么大不了的。随着您对流星的熟悉,您会发现find
操作的结果通常以非时间敏感的方式使用。检查客户端是否有数据的一种简单方法是等待页面加载,然后启动浏览器控制台,然后手动输入:
console.log(MyCollection.findOne());
至于您的其他问题,问候语必须是可以在 html 中显示的内容 - 例如字符串。不可能是文件。假设您的文档有一个 message
属性,您可以这样做:
return MyCollection.findOne().message;
【讨论】:
感谢您的帮助!我不知道发布数据需要一段时间。这使我走上了正确的道路,我发现花了这么长时间的原因是因为数据库太大了。我在一个较小的数据库上对其进行了测试,它似乎可以工作。 我很高兴这对您有所帮助。希望您能确定一种方法来发布较小的数据子集并提高性能。以上是关于流星客户端访问现有的 mongoDB的主要内容,如果未能解决你的问题,请参考以下文章