我表中的文档结构如下:
const mongoose = require('mongoose');
const logSchema = new mongoose.Schema({
eventName: {
type: String,
required: true,
enum: ['connect', 'status', 'probability'],
},
timestamp: {
type: Date,
required: true,
}
}, {
timestamps: true
});
const Log = mongoose.model('Log', logSchema);
module.exports = Log;
我的意图是提取大小为7
的数组(过去7天-过去一周)。每个项目都是具有2个主要字段的JSON:开始和结束的计数器。我想计算第0<=i<=7
天有多少文档被视为开始,而有多少文档被视为结束。
将文档视为eventName === 'connect
的开始,否则认为文档的结束。
这是我当前的代码,该代码通常计算每天(开始和结束)每天有多少个文档。但是我想更改它,以使每天有多少个被视为开始,有多少个被视为结束。我该怎么办?
weeklyLogs = await Log.aggregate([
{ $match: { timestamp: { $gte: moment.tz('Asia/Jerusalem').subtract(6, 'days').startOf('day').toDate() } } },
{
$group: {
_id: {
$dateFromParts: {
year: { $year: { date: "$timestamp", timezone: "Asia/Jerusalem" } },
month: { $month: { date: "$timestamp", timezone: "Asia/Jerusalem" } },
day: { $dayOfMonth: { date: "$timestamp", timezone: "Asia/Jerusalem" } },
timezone: "Asia/Jerusalem"
}
},
documents: { $sum: 1 }
}
},
{ $project: { documents: 1 } }
]);
答案 0 :(得分:0)
为>> [SensData , SensInfo] = GetData([], 'Acceleration')
SensData =
[10x1 double] [10x1 double]
SensInfo =
nSensor: 2
SensorType: 'Acceleration'
添加条件:
$sum
您可以使用weeklyLogs = await Log.aggregate([
{ $match: { timestamp: { $gte: moment.tz('Asia/Jerusalem').subtract(6, 'days').startOf('day').toDate() } } },
{
$group: {
_id: {
$dateFromParts: {
year: { $year: { date: "$timestamp", timezone: "Asia/Jerusalem" } },
month: { $month: { date: "$timestamp", timezone: "Asia/Jerusalem" } },
day: { $dayOfMonth: { date: "$timestamp", timezone: "Asia/Jerusalem" } },
timezone: "Asia/Jerusalem"
}
},
start: {
$sum: {
$cond: [ { $eq: ['$eventName', 'connect'] }, 1, 0]
}
},
end: {
$sum: {
$cond: [ { $ne: ['$eventName', 'connect'] }, 1, 0]
}
}
}
}
]);
处理多个聚合管道,如下所示:
$facet