2013-03-06 2 views
0

у меня есть «сообщение» коллекция с большим количеством сообщений, и я хочу, чтобы получить отчетливую YearMonth значение из post.published_dateMongoDB: как вернуть различные данные с фильтрацией

Обратный пример:

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

Я m используя Symfony2 + DoctrineMongoDB. Я думаю, что я должен использовать QueryBuilder с картой и сокращать функции, но я не могу их использовать!

Любая помощь будет оценена

Благодаря

+2

Пожалуйста, не могли бы вы опубликовать и пример документа состав? – br3w5

ответ

0

Я хотел бы предложить, чтобы отфильтровать даты на стороне клиента, но если вам действительно нужно фильтровать на сервере вы можете вы рамочные агрегатных $ разматывать/$ addToSet трюк. Что-то вроде этого:

db.post.aggregate([ 
     {$match: ...}, // your match here 
     {$project: { 
       published_date: 1 
     }}, 
     {$unwind: "$published_date"}, 
     {$group: { 
      _id: "$_id", 
      unique_published_date: {$addToSet: "$published_date"} 
     }} 
]) 
0

Если Вы используете Symfony2 и Монго дб вы можете создать хранилище для коллекции, как показано ниже, и вызовите функцию хранилища 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; 
} 
} 
Смежные вопросы