无法减去两双mongodb聚合

时间:2019-12-07 22:55:04

标签: mongodb mongodb-query

我正在尝试对“价格”和“ numberOfHours”两个字段进行一些数学运算。它们都是Double类型。但是它向我显示了不可能的信息,因为“仅支持数字类型,不支持字符串”。开始和结束是日期类型。 这是聚合:

db.bookings.aggregate([
    {
        $project: {
            price: 1,
            numberOfHours: {
                        $multiply: [
                            {
                                $divide: [
                                    {
                                        $subtract: ["$end", "$start"]
                                    },
                                    3600000
                                ]
                            },
                            35
                        ]

                    }
        }
    },
    {
        $project: {
            netWorth: {
                $multiply: [
                "$price",
                "$numberOfHours"
            ]
            }

        }
    }
])

它向我显示信息:$ multiply仅支持数字类型,不支持字符串。当我将数学运算更改为“ $ subtract”-“不能从字符串中减去$ subdouble时”。 所以我检查了此字段的类型,发现它们都是Double类型: This is type of fields

1 个答案:

答案 0 :(得分:0)

使用以下输入文档:

{ _id: 1, price: 2,  end: ISODate(), start: ISODate("2019-12-08T00:00:00.000Z") }

和下面的聚合查询(您自己的代码,重新设置格式):

db.test.aggregate( [
{
  $project: {
      price: 1,
      numberOfHours: {
         $multiply: [
             { $divide: [ 
                    { $subtract: [ "$end", "$start" ] }, 
                     3600000 ] 
             },
             35
         ]
       }
  }
},
{
  $project: {
      netWorth: {
          $multiply: [
              "$price",
              "$numberOfHours"
          ]
      }
  }
}
] )

第一个$project阶段返回:{ "_id" : 1, "price" : 2, "numberOfHours" : 900.52865 }

第二阶段$project返回:{ "_id" : 1, "netWorth" : 1801.0573 }

运行查询时没有错误(即使我将运算符从乘法改为减法也是如此)。

您提供的“这是字段类型”链接没有end字段。您正在使用的bookings集合中的输入文档可能对某些文档具有错误的字段类型。您可能要尝试使用一个或两个示例文档进行查询(例如我上面发布的内容),然后再次检查结果。