Метеоритная агрегация TypeError: невозможно прочитать свойство - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть функция публикации, которая выполняет агрегацию, которую я преобразовываю из массива в коллекцию:

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);
            }
        )
    );
});

Когда я ее запускаю.Я получаю

Ошибка выполнения агрегации: Ошибка типа: Не удается прочитать свойство '_id' с нулевым значением

Кроме того, я занимаюсь разработкой в ​​облаке AWS 9. Интересно, это создает проблему?

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Я закончил отмену агрегации и вместо этого реструктурировал БД. Я не уверен точно, что происходило, когда переменная события обнулялась. Вместо использования таблицы сопоставления я использовал поддокументы для моделирования отношения один ко многим. В конечном счете, после большого разочарования в агрегации метеоров, я думаю, что это правильный подход, поскольку он соответствует концептуальной модели объектно-ориентированных баз данных.

0 голосов
/ 22 сентября 2018

Агрегирование метеоров изменилось в недавнем обновлении в 1.7.1. Функция агрегации Монго теперь возвращает другое значение.Раньше он возвращал курсор, теперь возвращает обещание, если я правильно помню.

Исправление заключается в добавлении .toArray () в конец исходного агрегатного вызова, и поведение такое же, как и раньше.

Монго добавил это критическое изменение, а не метеор.

0 голосов
/ 18 сентября 2018

Это может быть связано с тем, что Metahacks версия агрегата не поддерживается Meteor 1.7.Попробуйте этот форк, который был изменен для работы с ним: https://github.com/sakulstra/meteor-aggregate

Для более подробной информации: https://github.com/meteorhacks/meteor-aggregate/issues/47

...