流星客户端访问现有的 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的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoose 访问现有的 mongodb 集合

使用 mongoose 访问现有的 mongodb 集合

如何将流星连接到现有后端?

流星中minimongo的原因是啥

直接从客户端访问MongoDB

使用从 Atlas 快照恢复的 mongodb 在本地运行流星时出现问题