我有一个名为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/