从数据库中获取2个计数器

时间:2020-10-15 10:01:54

标签: javascript node.js mongoose

我表中的文档结构如下:

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 } }
]);

1 个答案:

答案 0 :(得分:0)

方法1

>> [SensData , SensInfo] = GetData([], 'Acceleration') SensData = [10x1 double] [10x1 double] SensInfo = nSensor: 2 SensorType: 'Acceleration' 添加条件:

$sum

方法2

您可以使用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
相关问题