publishing/subscribing Mongo 聚合查询出现问题
Trouble publishing/subscribing to a Mongo aggregate query
使用 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
不存在。
我做错了什么?
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");
来访问数据 'reactively'(准备就绪时)
使用 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
不存在。
我做错了什么?
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");