2015-10-13 3 views
3

Я хочу получить отчетливый набор лет и месяцев для всех объектов документа в моем MongoDB.Получить отличные даты ISO по дням, месяцам, годам

Например, если документы имеют даты:

  • 2015/08/11
  • 2015/08/11
  • 2015/08/12
  • 2015/09/14
  • 2014/10/30
  • 2014/10/30
  • 2014/08/11

Возвращенные уникальные месяцы и годы для всех документов, например:

  • 2015/08
  • 2015/09
  • 2014/10
  • 2014/08

схемы фрагмент:

var myObjSchema = mongoose.Schema({ 
     date: Date, 
     request: { 
      ... 

Я попытался с помощью distinct против поля схемы date:

db.mycollection.distinct ('дата', {}, {})

Но это дало повторяющиеся даты. Выход сниппет:

ISODate("2015-08-11T20:03:42.122Z"), 
ISODate("2015-08-11T20:53:31.135Z"), 
ISODate("2015-08-11T21:31:32.972Z"), 
ISODate("2015-08-11T22:16:27.497Z"), 
ISODate("2015-08-11T22:41:58.587Z"), 
ISODate("2015-08-11T23:28:17.526Z"), 
ISODate("2015-08-11T23:38:45.778Z"), 
ISODate("2015-08-12T06:21:53.898Z"), 
ISODate("2015-08-12T13:25:33.627Z"), 
ISODate("2015-08-12T14:46:59.763Z") 

Так что вопрос:

  • а: Как я могу достичь выше?
  • b: Можно ли указать, какую часть даты вы хотите отличать? Мне нравится distinct('date.month'...)?

EDIT: Я нашел и может получить эти даты и такие с помощью следующего запроса, однако результаты не отличаются:

db.mycollection.aggregate( 
    [ 
     { 
      $project : { 
        month : { 
         $month: "$date" 
        }, 
        year : { 
         $year: "$date" 
        }, 
        day: { 
         $dayOfMonth: "$date" 
        } 
       } 
      } 
     ] 
); 

Выход: дублирует

{ "_id" : "", "month" : 7, "year" : 2015, "day" : 14 } 
{ "_id" : "", "month" : 7, "year" : 2015, "day" : 15 } 
{ "_id" : "", "month" : 7, "year" : 2015, "day" : 15 } 

ответ

4

Вам необходимо сгруппировать документ после проектирования и использовать $addToSet оператор аккумулятора

db.mycollection.aggregate([ 
    { "$project": { 
     "year": { "$year": "$date" }, 
     "month": { "$month": "$date" } 
    }}, 
    { "$group": { 
     "_id": null, 
     "distinctDate": { "$addToSet": { "year": "$year", "month": "$month" }} 
    }} 
]) 
-1
db.mycollection.aggregate(
[ 
{ 
"$project": { 
        "year": { "$year": "$date" }, 
        "month": { "$month": "$date" } 
      } 
},{ $group : { 
        "_id" :{"year" : "$year" } 
       } 
}, 
{ 
$sort: {'_id': -1 
} 
    } 
]) 
Смежные вопросы