流星聚合TypeError:无法读取属性

时间:2018-09-17 18:16:01

标签: mongodb meteor publish aggregation

我有一个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上进行开发。我想知道这是否在造成问题?

3 个答案:

答案 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到底发生了什么。我没有使用映射表,而是使用子文档来建立一对多关系的模型。最终,在经历了很多关于流星聚合的挫折之后,我认为这是正确的方法,因为它符合面向对象数据库的概念模型。