0

我已经安装了 mongodb-aggregation 包,但是在流星方法中执行聚合时返回“未定义”。我认为我缺少一些基本的东西。应该如何进行聚合?任何建议都会很棒。

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...
4

1 回答 1

2

最重要的是,请注意这db.ratings.aggregate与流星或流星-mongo-extensions 无关。Mongo本身有一个原生db.<collection>.aggregate()函数。所以这就是它在外壳中工作的原因。

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

最后是meteor-mongo-extensions,这实际上是一种黑客攻击。我还没有确认我相信这个问题可以在这个Github issue中找到。尝试在流星方法之外的服务器上运行它,以确保。

如果您的问题是包损坏,您可以尝试 Atmosphere 上管理聚合的众多包之一。mongodb-server-aggregation 看起来很有希望。

于 2013-10-16T04:07:35.780 回答