我有一个包含大量帖子的“帖子”集合,我想从YearMonth
post.published_date
值
返回示例:
['201303', '201301', '201212' ... ... ]
我正在使用Symfony2 + DoctrineMongoDB。 我想我会使用QueryBuilder和map和reduce函数,但是我无法使用它们!
任何帮助将不胜感激
由于
答案 0 :(得分:0)
我建议在客户端过滤日期,但如果你真的需要在服务器上过滤,你可以使用汇总框架$ unwind / $ addToSet技巧。像这样:
db.post.aggregate([
{$match: ...}, // your match here
{$project: {
published_date: 1
}},
{$unwind: "$published_date"},
{$group: {
_id: "$_id",
unique_published_date: {$addToSet: "$published_date"}
}}
])
答案 1 :(得分:0)
如果您正在使用symfony2和mongo db,则可以按如下所示为集合创建存储库,并调用存储库函数findDistinctYearMonth
class PostRepository extends DocumentRepository {
public function findDistinctYearMonth()
{
$yearMonths = $this->createQueryBuilder()
->map('function() {
var yearMonth =
emit("" + this.published_date.getFullYear()+("0"+(this.published_date.getMonth()+1)).slice(-2),1);
}')
->reduce('function(k,v) {
return 1;
}')
->getQuery()
->execute();
$arr = array();
foreach($yearMonths as $yearMonth) {
$arr[] = $yearMonth["_id"];
}
return $arr;
}
}