gpt4 book ai didi

javascript - MongoDB 简单时间序列

转载 作者:行者123 更新时间:2023-12-03 00:33:03 25 4
gpt4 key购买 nike

我正在尝试构建一个简单的时间序列 API 来执行以下操作:

  1. 每天 00 点,CRON 作业都会访问 Facebook API 并获取多个 Facebook 页面的粉丝计数,然后将它们保存在 mongoDB 中,如下所示:

{
"_id": ObjectId("5c13b3663b720419c7806a4f"),
"名称": "页面名称",
“日期更新”:“2018-12-17T00:00:00.000Z”,
“喜欢”:[
{
“日期”:“2018-12-14T00:00:00.000Z”,
“值”:NumberInt(74154)
},
{
“日期”:“2018-12-15T00:00:00.000Z”,
“值”:NumberInt(89154)
},
{
“日期”:“2018-12-17T00:00:00.000Z”,
“值”:NumberInt(86745)
}
]
}

每天,当 CRON 完成其工作时,“喜欢”数组都会更新为当天的喜欢计数。

  • 我通过传递大约两天的页面名称和日期范围来查询 API,然后 API 按日期范围返回“喜欢”数组中两个对象之间的值差异和百分比。
  • 所以我很乐意进行这样的 api 调用:

    https://api.com/likes?name=PageName&from=2018-12-14&to=2018-12-17

    并获得一个 json 响应,例如:

    { 之前:74154,现在:86745,更改:12.591,changePercent:+10% }

    可以用 mongo 做到这一点吗?我想聚合就是我所需要的?我对数据库和后端 javascript 编程相当陌生(我是前端开发人员),因此我们将不胜感激。

    顺便说一句,我的架构设计正确吗?我应该为页面创建一个 Mongoose 方案,然后为喜欢条目创建另一个方案,然后在页面方案中引用喜欢条目方案吗?

    如果我很困惑,请向我询问您需要的任何信息,我会尽力快速回复。

    谢谢!

    最佳答案

    一个简单的实现是使用聚合:

    [
    {
    $unwind: {
    path: '$likes'
    }
    }, {
    $match: {
    'likes.date': {
    $gte: new Date('2018-12-14'),
    $lte: new Date('2018-12-17')
    }
    }
    }, {
    $group: {
    _id: null,
    first: {
    $first: '$$ROOT'
    },
    last: {
    $last: '$$ROOT'
    }
    }
    }, {
    $addFields: {
    before: '$first.likes.value',
    now: '$last.likes.value'
    }
    }, {
    $addFields: {
    change: {
    $subtract: [
    '$now', '$before'
    ]
    }
    }
    }, {
    $addFields: {
    changePercent: {
    $multiply: [
    {
    $divide: [
    '$change', '$before'
    ]
    }, 100
    ]
    }
    }
    }, {
    $project: {
    before: 1,
    now: 1,
    change: 1,
    changePercent: 1
    }
    }
    ]

    关于javascript - MongoDB 简单时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53781364/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com