我正在尝试获取给定作者的总帖子。
我的代码(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
}
答案 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