Почему метод агрегата ($date) не работает в MongoDB
Почему ниже код работает
db.getCollection('CustomerData').aggregate([
{$addFields: {
"month": {$month: new Date("2018-09-18T00:00:00.000Z")},
"year": {$year: new Date("2018-09-18T00:00:00.000Z")}
}
},
{$match: { month: 9, year: 2018, flag: 'dealer' } }
])
Но не это
db.getCollection('CustomerData').aggregate([
{$addFields: {
"month": {$month: new Date("$date")},
"year": {$year: new Date("$date")}
}
},
{$match: { month: 9, year: 2018, flag: 'dealer' } }
])
Примечание: в документе есть поле даты. Я использую MongoClient. Пример данных.
{
"_id" : ObjectId("5b9ed3f221f0c70c7c0fd035"),
"customerName" : "aaa",
"date" : "2018-09-18T00:00:00.000Z",
"flag" : "dealer"
}
1 ответ
Правильный оператор mongodb $dateFromString
,
db.getCollection('CustomerData').aggregate([
{$addFields:{
"month":{$month:{$dateFromString:{
dateString:"$date"}}},
"year":{$year:{$dateFromString:{
dateString:"$date"}}}
}},
{$match:{month:9,year:2018,flag:'dealer'}}
])
Вы можете сделать конвейер агрегации в обычном запросе в 3.6. Я тоже добавлю это.