我正在尝试对“价格”和“ 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
答案 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
集合中的输入文档可能对某些文档具有错误的字段类型。您可能要尝试使用一个或两个示例文档进行查询(例如我上面发布的内容),然后再次检查结果。