Meteor:find()在部署时不返回任何文档

时间:2015-09-21 20:00:21

标签: mongodb meteor

我有一个名为billers的集合。我在服务器上发布了这个集合,如下所示:

Meteor.publish("billers",function(){
    return billers.find();
});

在客户端代码中,我订阅billers,回调如下:

Session.set('data_loaded',false);
Meteor.subscribe("billers",{
    onReady : function() {console.log("data loaded");
                Session.set('data_loaded',true);}
});

然后,当billers会话变量为data_loaded时,我在客户端有一个帮助器从true返回文档:

Billers : function(utility){
    if(Session.get('data_loaded')==true){
        if(billers.find().count()==0)
            console.log("zero");
        else
            console.log("not zero");
        return billers.find({utility:utility}); 
        }
},

我使用{{#each Billers}}

在模板中访问此内容

在localhost上:一切正常。控制台打印data_loaded,然后显示计数not zero,并显示所有提取的文档。

部署到subdomain.meteor.com时:控制台打印data_loaded,表示数据库已准备就绪。但是,现在它打印zero,表示find().count()返回0.因此提取了0个文档。因此,模板中没有显示任何文档。

该集合确实有文档,正确地通过localhost验证,我也通过mongodb客户端进行了独立检查。我该如何解决这个问题?这对我来说似乎是一个流星问题..

1 个答案:

答案 0 :(得分:1)

提问者面临的问题是假设本地数据库将在流星子域部署的应用程序上可用。

当应用程序通过meteor deploy <subdomain>.meteor.com部署到meteor的服务器时,会初始化一个新的mongodb。它不包含任何文档,除非它们作为代码的一部分插入。

可以导出本地数据,然后将其导入到meteor servers db,如图in @iMagdy's answer to this question所示。

他们的代码段如下所示:

# How to upload local db to meteor:

# -h = host, -d = database name, -o = dump folder name
mongodump -h 127.0.0.1:3002 -d meteor -o meteor

# get meteor db url, username, and password
meteor mongo --url myapp.meteor.com

# -h = host, -d = database name (app domain), -p = password, folder = the path to the dumped db
mongorestore -u client -h c0.meteor.m0.mongolayer.com:27017 -d myapp_meteor_com -p 'password' folder/