2013-10-14 3 views
0

Я установил пакет агрегации mongodb, но я получил «undefined», возвращенный при формировании агрегации в методе метеор. Я предполагаю, что мне не хватает чего-то фундаментального. Как следует выполнять агрегацию? Будем признательны любому совету.Выполнение агрегации с использованием метеор-манго-расширений

rate: function(ratingProp){ 
    var user = Meteor.user(); 
    var postId = ratingProp.postId; 
    var post = Posts.findOne({_id: postId}); 
    var rateVal = ratingProp.rateVal; 


    // ensure the user is logged in 
    if (!user) { 
     throw new Meteor.Error(401, "You need to signin to rate."); 
    } 

    // ensure rating has rateVal 
    if (!rateVal){ 
     throw new Meteor.Error(422, "No rating provided."); 
    } 

    // ensure rating has a post 
    if (!post){ 
     throw new Meteor.Error(422, "Rating not associated with a post."); 
    } 

    Ratings.upsert({userId: user._id, postId: postId}, 
        {$set: { rateVal: rateVal }} 
    ); 

    // perform aggregation 
    var avgRate = Ratings.aggregate([ 
     {$match: 
      // hard coded for testing 
      {postId: "D7f3WoDEGW3SqGKW9"} 
     }, 
     {$group: 
      { 
       _id: null, 
       "avgRating":{$avg: "$rateVal"} 
      } 
     } 
    ]); 


    // additional code... 

ответ

2

Самое главное, обратите внимание, что db.ratings.aggregate не имеет вещь, чтобы сделать с метеоритом или метеорных-Монго-расширений. Mongo у него есть родной db.<collection>.aggregate() функция. Так вот почему он работает в оболочке.

Теперь для Метеор. Meteor использует пользовательский драйвер mongo, чтобы он мог, в частности, настроить все интересные реактивные аспекты в Meteor.Collection(). Таким образом, некоторые функции манго еще не реализованы.

И наконец метеор-монго-удлинения, что является эффективным взломом взлома. Я еще не подтвердил это. Я считаю, что проблему можно найти в этом Github issue. Попробуйте запустить это на сервере вне метода метеоров, чтобы быть уверенным.

Если ваша проблема в том, что пакет сломан, вы можете попробовать один из множества пакетов в атмосфере, которые управляют агрегацией. mongodb-server-aggregation выглядит многообещающим.

+0

Спасибо! Я все еще получаю undefined после перемещения агрегации вне метода. Какие пакеты поддерживают агрегацию? Я мог только найти агломерацию монгодба (тот, который я использовал) и агломерацию mongodb-server в атмосфере. – Derek

+0

Учитывая ваш пример, агрегирование mongodb-server - это тот, который я попробовал бы. Вы можете обернуть вызов внутри метеорного метода, как в вашем примере, и он должен работать нормально. Поймите, что эта функциональность в конечном итоге должна быть добавлена ​​в основные коллекции Meteor. Все до тех пор будет просто патчем. (Дайте мне знать, если это исправлено для вас, спасибо!) – Sivli

+0

Я пробовал mongodb-server-aggregation, но имел ту же неопределенную проблему. У меня есть взломать место, где я держу сумму и подсчитываю и вычисляю среднее значение, но оно, вероятно, восприимчиво к состоянию гонки. Я попытаюсь вернуться к агрегации mongodb-server, когда я закончу некоторые из других вещей, над которыми я работаю, и посмотреть, смогу ли я решить проблему. – Derek

Смежные вопросы