Mongodb 使用meteor mongo扩展执行聚合

Mongodb 使用meteor mongo扩展执行聚合,mongodb,meteor,Mongodb,Meteor,我已经安装了mongodb聚合包,但在meteor方法中形成聚合时返回“undefined”。我想我错过了一些基本的东西。应该如何执行聚合?任何建议都很好 rate: function(ratingProp){ var user = Meteor.user(); var postId = ratingProp.postId; var post = Posts.findOne({_id: postId}); var rateVal = ratingProp.rate

我已经安装了mongodb聚合包,但在meteor方法中形成聚合时返回“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...

最重要的是,请注意,
db.ratings.aggregate
与meteor或meteor mongo扩展无关Mongo本身有一个本机
db..aggregate()
函数。这就是它在壳中工作的原因

现在来看流星。Meteor使用自定义mongo驱动程序,因此它可以在Meteor.Collection()中设置所有良好的反应方面。因此,一些mongo功能尚未实现

最后,meteor mongo extensions,这实际上是一个黑客中的黑客。我还没有确认,我相信这个问题可以在这里找到。试着在meteor方法之外的服务器上运行这个,只是为了确保


如果您的问题是包损坏,您可以尝试Atmosphere上管理聚合的许多包中的一个。mongodb服务器聚合看起来很有希望。

谢谢!在将聚合移到方法之外之后,我仍然收到未定义的消息。哪些包支持聚合?我只能在atmosphere上找到mongodb聚合(我使用的那个)和mongodb服务器聚合。您可以将调用封装在meteor方法中,就像在您的示例中一样,它应该可以正常工作。请务必理解,此功能最终应添加到核心Meteor集合中。在那之前,一切都只是一个补丁。(请告诉我这是否为您解决了问题,谢谢!)我尝试了mongodb服务器聚合,但遇到了相同的未定义问题。我有一个黑客在地方,我保持一个总和,计数和计算平均值,但它可能是容易受到比赛条件。当我完成我正在做的其他一些事情后,我将尝试返回mongodb服务器聚合,看看是否可以解决这个问题。回答这个问题有点晚了,但我在mongo shell和atmosphere上的聚合包之间得到了不同的结果。这很令人沮丧。