Mongodb从不同的集合中获取两个值并计算百分比

杂乱的

我在mongodb中有两个集合。

我想尝试计算成功率。如果send.TOTAL/targetAudience小于0.9,我需要将send.TOTAL/targetAudience分开,否则返回0,否则返回1。我在下面共享我的脚本。但它返回错误:$ divide仅支持数字类型,不支持数组和数组

message:

                {
                        "_id" : 1727,
                        "appKey" : "morhipo",
                        "msgMethod" : "CAMPAIGN",
                        "allowApiOverride" : false,
                        "firstChildId" : 0,
                        "secondChildId" : 0,
                        "sampleRate" : 0,
                        "targetAudience" : 1135195
                }



       msgstats:
                {
                        "_id" : ObjectId("5b4ddd02f4eb8c72b57e89bb"),
                        "mid" : 1727,
                        "sent" : {
                                "TOTAL" : 756023,
                                "ANDROID" : 398973,
                                "IOS" : 357050
                        }

            // MY Script
            var condition =0;
            var bol =0;
            db.getMongo().getDBNames().forEach(function(dbName) {
            var instColl=db.getMongo().getDB(dbName).getCollection("message");
            var sending = instColl.aggregate([
              {
                $match: {
                 "endDate" : {$gt:new Date(new Date().setDate(new Date().getDate()-10)),$lte:new Date()},"sendStatus" : "FINISHED","msgMethod" : "CAMPAIGN"
                }
              },
              {
                $lookup: {
                  from: "msgStats",
                  localField: "_id",
                  foreignField: "mid",
                  as: "docs"
                }
              },
              {
                $lookup: {
                  from: "message",
                  localField: "_id",
                  foreignField: "_id",
                  as: "docs1"
                }
              },
              {
                "$project": {
                  "bol":{"$divide":["$docs.sent.TOTAL","$docs1.targetAudience"]},
                  "condition":{"$cond":{if:{$lt:["$bol",0.9]},then: 1, else:0}
                  }
                }
              }
            ]);
            print(condition);
            });
s7vr

$lookup以数组形式返回输出。您必须使用$arrayElemAt从数组中提取单个元素。

$project舞台下使用$let表达式以读取单个元素,然后在内部$cond进行计算以输出布尔值。

{
  "$project":{
    "condition":{
      "$let":{
        "vars":{
          "total":{"$arrayElemAt":["$docs.sent.TOTAL",0]},
          "targetAudience":{"$arrayElemAt":["$docs1.targetAudience",0]}},
        "in":{
          "$cond":{
            "if":{"$lt":[{"$divide":["$$total","$$targetAudience"]},0.9]},
            "then":1,
            "else":0
          }
        }
      }
    }
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

计算两个值之间的百分比

使用两个不同代码的二冲程百分比计算中的错误

R:如何从两个不同的列中获取百分比变化

如何计算R中特定观测值的两个变量之间的百分比?

计算插入两个表中的值之间的百分比

SSRS 2016 - 如何计算组中两个值之间的百分比差异?

从 txt/csv 文件 (Python) 中的两个值计算百分比增长

在两个不同的列中满足两个条件的观察值的百分比(以r表示)

在两个不同的日期获取两个数字之间的百分比变化

计算两个小时的百分比?

计算两个选择计数的百分比

如何使用来自两个不同表的数据进行百分比计算?

从两个不同的表中计算增长百分比时除以零误差

如何计算两个事件的发生,然后显示提升的百分比并在 kibana 中获取指标?

计算两个值之间的百分比(总和)

SQL计算具有相同sub_id的两个值的百分比。

计算百分比两个值并求和算术运算mysql

如何从这两个时间值计算百分比值

使用两个表计算带有布尔值的列的百分比

使用Java中的两个long来计算百分比的溢出安全方法

计算JavaScript中两个日期之间的百分比

计算JavaScript中两个多边形的重叠百分比

计算C#中两个uint32数字的百分比变化

在Excel中,我正在尝试计算两个总和的百分比

计算mongodb中的百分比

如何从SSMS中2个不同查询获得的值计算百分比?

获取R中两个多边形之间的重叠百分比

如何找到包含在单独数组中的两个值的百分比份额?

如何计算第三个值在两个值的范围之间的百分比