【问题标题】:Aggregation with multiple conditions javascript/mongoose多条件聚合 javascript/mongoose
【发布时间】:2018-03-11 15:04:36
【问题描述】:

我试图在我的猫鼬上使用聚合。

理想的脚本,会总结过去 100 天的所有 crime.amount 和 heavy_crime 数量,并且只得到与用户 ID 相关的结果。

(今天:todate) (100天前:fromdate

型号:

time: Number,
    userid : String,

  crime: {
        cash: {type: Number, default: 0},
        amount: { type: Number, default: 0}
    },
    heavy_crime: {
        cash: {type: Number, default: 0},
        amount: { type: Number, default: 0}
    },

尝试代码:

function checkCrimeRating(userid) {
    var todate = new Date();
    var fromdate = new Date();
    var lastfive = new Date();
    var MainDate = date.getDate();

    fromdate.setHours(0,0,0,0);
    todate.setHours(0,0,0,0);
    lastfive.setHours(0,0,0,0);

    lastfive.setDate(MainDate - 5);
    fromdate.setDate(MainDate - 100);


    return dailyStats.aggregate(
        { $group: {
            _id: "$time" : $gte {fromdate.getTime()}, $lte: {todate.getTime()},
            total:       { $sum: { $add: ["$crime.amount", "$heavycrime.amount"] } },
        }}
    ).then(function (numberO))
}

那么我怎样才能使聚合只对过去 100 天进行总结,并使用正确的用户 ID?

numberO Would ideally return number of crime and heavycrime the last 100 days.

【问题讨论】:

    标签: mongodb mongoose aggregation-framework


    【解决方案1】:

    您错过了$match 阶段。

    将您的日期比较移动到匹配阶段,然后将 $group 移动到总犯罪率。

    dailyStats.aggregate([
      {
        "$match": {
          "user": userid,
          "time": {
            "$gte": fromdate.getTime(),
            "$lte": todate.getTime()
          }
        }
      },
      {
        "$group": {
          "_id": null,
          "total": {
            "$sum": {
              "$add": [
                "$crime.amount",
                "$heavycrime.amount"
              ]
            }
          }
        }
      }
    ]);
    

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 2015-08-17
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      • 2018-01-30
      • 2020-10-02
      • 2020-02-27
      • 2021-08-24
      相关资源
      最近更新 更多