获得MAP REDUCE的作者总帖子

时间:2014-04-14 21:54:52

标签: mongodb doctrine


我正在尝试获取给定作者的总帖子。 我的代码(Doctrine Mongodb 1.2.x):

 $dm = $this->get('doctrine_mongodb')
               ->getManager();
    $qb = $dm->createQueryBuilder('ngNearBundle:Posts');
    $count = $qb->select('active')
                    ->field('author')
                    ->equals($request->getSession()->get('userId'))
                    ->map('function() { emit("totalPosts", { count: 1 }); }')
                    ->reduce('function(k, vals) {
                                return vals.length;
                                            }'
                            )
                    ->getQuery()
                    ->execute()
                    ->toArray();
    var_dump($count);

当我得到超过70 000时,我会得到16个帖子 我怎样才能做到这一点? 谢谢
PS: 文件示例:

    {
"_id" : ObjectId("5304981b9d922e182e2bc442"),
            "active" : 0,
            "author" : "52cb29b0211b6fd9248b456b",
            "contact" : "406-529-1966",
            "date" : ISODate("2014-02-19T11:39:51.027Z"),

            "title" : "Great day",
            "type" : 3
    }

1 个答案:

答案 0 :(得分:1)

而不是做

return vals.length

将其更改为

return Array.sum(vals)

另请参阅此处以供参考:http://docs.mongodb.org/manual/core/map-reduce/

您也可以使用聚合,如下所示

db.collection.aggregate(
 {$match: {author: "52cb29b0211b6fd9248b456b"} },
 {$group: {_id:null, totalPosts: {$sum:1} } }
)

您必须在mongo控制台上运行它。

有关详细信息,请查看此处:http://docs.mongodb.org/manual/applications/aggregation/ 并且对于doctorine mongo来看这里:https://github.com/doctrine/DoctrineMongoDBBundle/issues/165