我有一个publish函数,它执行的是聚合,我正在将其从数组转换为集合:
Meteor.publish("Jobsnohelpers", function (args) {
var sub = this;
var pipeline = [
{ $lookup:
{
from: "Helperjobs",
localField: "job",
foreignField: "_id",
as: "temp"
}},
{
$match:
{"temp.Helpername": {$exists: false }}
},
Jobs.aggregate(
pipeline,
Meteor.bindEnvironment(
function(err, result) {
_.each(result, function(e) {
sub.added("Jobsnohelpers", Random.id(),
{
ShortDesc: e._id,
LongDesc: "Hello this is a test",
LongDesc: e.LongDesc
}
);
});
sub.ready();
},
function(error) {
Meteor._debug( "Error doing aggregation: " + error);
}
)
);
});
当我运行它时。我得到
执行汇总时出错:TypeError:无法读取null的属性“ _id”
此外,我正在AWS Cloud 9上进行开发。我想知道这是否在造成问题?
答案 0 :(得分:1)
流星聚合在1.7.1的最新更新中已更改mongo聚合函数现在返回另一个值。它曾经返回一个游标,如果我没记错的话,它会返回一个Promise。
解决方法是将.toArray()添加到原始聚合调用的末尾,其行为与以前一样。
Mongo添加了此重大更改而非流星。
答案 1 :(得分:0)
这可能与以下事实有关:Meteor 1.7不支持聚合的meteorhacks版本。尝试修改过的叉子来使用:https://github.com/sakulstra/meteor-aggregate
有关更多详细信息:https://github.com/meteorhacks/meteor-aggregate/issues/47
答案 2 :(得分:0)
我最终取消了聚合,而是重组了数据库。我不确定事件变量为null到底发生了什么。我没有使用映射表,而是使用子文档来建立一对多关系的模型。最终,在经历了很多关于流星聚合的挫折之后,我认为这是正确的方法,因为它符合面向对象数据库的概念模型。