【问题标题】:meteor client side access to an existing mongoDB流星客户端访问现有的 mongoDB
【发布时间】:2014-02-25 17:23:16
【问题描述】:

我是 Meteorjs 的新手,我正在尝试从现有的 MongoDB 中检索数据。 这是我到目前为止所拥有的:

  1. 我将环境变量 MONGO_URL 设置为 mongoDB url export MONGO_URL="mongodb://username:password@address:port/dbname"

  2. 使用以下代码创建了一个新的流星项目:

    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 中读取。 如果您有任何建议,请告诉我!

【问题讨论】:

    标签: javascript mongodb meteor


    【解决方案1】:

    即使启用了自动发布,客户端启动与发布数据之间也存在延迟。在您的第一个 console.log 运行时,文档尚未完成同步,因此 findOne 将返回 undefined。事实证明这没什么大不了的。随着您对流星的熟悉,您会发现find 操作的结果通常以非时间敏感的方式使用。检查客户端是否有数据的一种简单方法是等待页面加载,然后启动浏览器控制台,然后手动输入:

    console.log(MyCollection.findOne());
    

    至于您的其他问题,问候语必须是可以在 html 中显示的内容 - 例如字符串。不可能是文件。假设您的文档有一个 message 属性,您可以这样做:

    return MyCollection.findOne().message;
    

    【讨论】:

    • 感谢您的帮助!我不知道发布数据需要一段时间。这使我走上了正确的道路,我发现花了这么长时间的原因是因为数据库太大了。我在一个较小的数据库上对其进行了测试,它似乎可以工作。
    • 我很高兴这对您有所帮助。希望您能确定一种方法来发布较小的数据子集并提高性能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-25
    • 2016-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    相关资源
    最近更新 更多