使用Meteor和Iron-Router,我正在尝试发布以下mongo查询(在服务器文件夹中):
Meteor.publish("getTestList", function() {
return Tests.aggregate(
[{
$project : {
"name" : 1,
"description" : 1,
"testNumber" : 1
}
}, {
$sort : {
"testNumber" : 1
}
}
])
});
请注意,我已在meteor mongo
控制台工具中测试了此查询,并且在那里工作正常。 Tests
也是
Tests = new Mongo.Collection("tests")
我正在订阅路由器,如下所示:
Router.route('/user', {
waitOn: function() {
// return [Meteor.subscribe("tests")];
return [Meteor.subscribe("tests"),Meteor.subscribe("getTestList")];
},
action: function() {
if (!this.ready()) {
this.render('loading');
}
else {
Session.set("testName", "blablabla")
Session.set("submitted", false)
this.layout('BasicLayout')
this.render('UserPortal')
}
}
});
如果我导航到/ user,那么它永远不会通过加载...屏幕。控制台中没有错误,如果我只订阅tests
而不订阅getTestList
(即代码中注释掉的行),那么UserPortal
模板会加载但是我收到控制台错误,指出Tests.aggregate
不存在。
我做错了什么?
答案 0 :(得分:3)
Meteor尚不支持聚合。你可以这样工作:
添加聚合包:meteor add meteorhacks:aggregate
请改用Meteor.call
/ Meteor.methods
,因为此时聚合结果是静态的。没有反应支持。
服务器端
Meteor.methods({
"getTestList" : function() {
return Tests.aggregate(
[{
$project : {
"name" : 1,
"description" : 1,
"testNumber" : 1
}
}, {
$sort : {
"testNumber" : 1
}
}
])
}
});
客户方:
您的模板
Template.xx.onCreated(function() {
Meteor.call("getTestList", function(err, result) {
Session.set("testlist", result);
});
});
然后您可以通过查看Session.get("testlist");