我有一个名为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}}
在本地主机上:一切正常。控制台打印data_loaded,然后是countnot zero,并显示所有提取的文档。
当部署到subdomain.meteor.com时:控制台打印data_loaded这意味着数据库已准备好使用。但是,现在它打印zero,这表示find().count()返回0。因此,提取了0个文档。因此,模板中没有显示任何文档。
集合中确实有文档,正如在localhost上正确工作所验证的那样,我还通过mongodb客户机独立检查了这些文档。如何解决此问题?对我来说这好像是流星的问题…

最佳答案

asker所面临的问题是假设本地db将在meteor子域部署的应用程序上可用。
当应用程序通过meteor deploy <subdomain>.meteor.com部署到Meteor的服务器时,会初始化一个新的MongoDB。除非作为代码的一部分插入,否则它将不包含任何文档。
可以导出本地数据,然后将其导入Meteor服务器数据库,如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/

09-20 18:33