我有以下Mongo(简化)聚合:
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 ...但已解决为默认情况。
任何帮助将不胜感激:)
答案 0 :(得分:0)
更改聚合的第二和第三步。 第二步应如下所述
async callQuery() {
return await new Promise((resolve, reject) => {
this.httpclient.get(MyUrl).subscribe((response) => {
resolve(response);
});
});
}
async WhateverFunction() {
...
const MyVar = await this.callQuery());
console.log(MyVar);
...
}
如下所述的第三步
// Stage 2
{
$group: {
_id: {
// date: { $dateToString: { format: '%Y-%m', date: '$date' } },
date: '$date',
resId: '$resId', attachment: '$attachment'
}
}
},
答案 1 :(得分:0)
我终于找到了解决方案。出于未知原因,$dateToString
在结果字符串的第一个位置插入了不可见的字符。
此无法显示的字符称为 零宽度非JOINER(U + 200C),可在“常规标点”块中找到。表示为: