У меня следующая монго (упрощенная) агрегация:
db.getCollection('oees').aggregate([
{ $match: {"$or":[
{"$and":[{"resId": ObjectId("568b9eb32847fe2000e0b071")},{"attachment":"turbine1"},{"date":{"$gte":ISODate("2018-04-01T00:00:00.000Z"),"$lte":ISODate("2018-06-30T00:00:00.000Z")}}]}
{"$and":[{"resId": ObjectId("...")},{"attachment":"..."},{"date":{"$gte":ISODate("..."),"$lte":ISODate("...")}}]}
]}}, { $group: {
_id: { date: { $dateToString: { format: '%Y-%m', date: '$date' } }, resId: '$resId', attachment: '$attachment' },
} },
{ $project: {
_id: 1,
resId: '$_id.resId',
attachment: '$_id.attachment',
date: '$_id.date',
hoursCount: {'$switch':{'branches':[
{'case':{'$eq':['$_id.date','2018-04']},'then':696},
{'case':{'$eq':['$_id.date','2018-05']},'then':720},
{'case':{'$eq':['$_id.date','2018-06']},'then':696}
], default:'$_id.date'}}
} }
])
Агрегация запрашивает коллекцию "oees", которая состоит из таких документов:
{
"_id" : ObjectId("589cc8e894e30b006989627b"),
"date" : ISODate("2017-01-01T00:00:00.000Z"),
"resId" : ObjectId("568b9eb32847fe2000e0b071"),
"attachment" : "turbine1",
"createAt" : ISODate("2017-02-09T19:54:13.537Z"),
"updatedAt" : ISODate("2017-02-09T19:54:13.537Z"),
"indicator" : "availabilityLosses",
"value" : 0,
"unit" : "hours"
}
И это дает мне, например, следующий результат:
{
"_id" : {
"date" : "2018-06",
"resId" : ObjectId("568b9eb32847fe2000e0b071"),
"attachment" : "turbine1"
},
"resId" : ObjectId("568b9eb32847fe2000e0b071"),
"attachment" : "turbine1",
"date" : "2018-06",
"hoursCount" : "2018-06",
}
Но я не могу понять, почему hoursCount
равно 2018-06
, поскольку это был один из случаев моего $switch
, который должен был логически разрешиться до 696 ... но иметь разрешено в случае по умолчанию.
Любая помощь будет оценена :)