0

YearMonth多数の投稿を含む「投稿」コレクションがあり、そこから個別の値を取得したいpost.published_date

返品例:

['201303', '201301', '201212' ... ... ]

Symfony2 + DoctrineMongoDB を使用しています。map 関数と reduce 関数で QueryBuilder を使用する必要があると思いますが、それらを使用することはできません!

どんな助けでも大歓迎です

ありがとう

4

2 に答える 2

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;
}
}
于 2013-03-06T17:46:02.907 に答える
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"}
        }}
])
于 2013-03-06T16:14:09.420 に答える