Ank*_*kit 3 mongodb aggregation-framework
我有一个这样的数据集:
{
"_id" : ObjectId("5c35f04c4e92b8337885d9a6"),
"activity" : {
"a1": 10,
"a2": 11,
"a3": 12,
"a4": 13,
"a5": 14,
"b1": 5,
"b2": 6
}
}
Run Code Online (Sandbox Code Playgroud)
注意:这是一个虚拟条目,实际条目约为 50 或 60 个,其中 30 个条目来自简单加法(如从 a1 到 a5),20 个条目用于比率(如 b1 和 b2)。为了询问这个概念,我最小化了数据集
现在从 a1 到 a5 我必须用乘法的一些权重值进行加法,如下所示:假设乘法值为 0.5
so it will be like this:
(a1*0.5 + a2*0.5 + a3*0.5 + a4*0.5 + a5*0.5)
Run Code Online (Sandbox Code Playgroud)
然后我必须取 b1 和 b2 的比率,然后乘以这样的权重
((b1:b2)*0.5)
Run Code Online (Sandbox Code Playgroud)
所以最终的计算将是这样的:
(a1*0.5 + a2*0.5 + a3*0.5 + a4*0.5 + a5*0.5 + (b1:b2)*0.5)
Run Code Online (Sandbox Code Playgroud)
为此我使用了 mongodb 聚合。我的代码是这样的:
db.Collection.aggregate([
{ $match: { _id: ObjectId("5c35f04c4e92b8337885d9a6") } },
{ $unwind: "$_id" },
{
$project: {
"activity.score": {
$add: [
{
$multiply: [
"$activity.a1",
0.5
]
},
{
$multiply: [
"$activity.a2",
0.5
]
},
{
$multiply: [
"$activity.a3",
0.5
]
},
{
$multiply: [
"$activity.a4",
0.5
]
},
{
$multiply: [
"$activity.a5",
0.5
]
},
{
$multiply: [
{
$divide: [
"$activity.b1",
"$activity.b2"
]
},
0.5
]
}
]
}
}
}
])
.then(data => {
console.log(data);
})
.catch(error => {
console.log(error);
});
Run Code Online (Sandbox Code Playgroud)
这样我就得到了答案,但万一我的 b2 为 0,如下所示:
{
"_id" : ObjectId("5c35f04c4e92b8337885d9a6"),
"activity" : {
"a1": 10,
"a2": 11,
"a3": 12,
"a4": 13,
"a5": 14,
"b1": 5,
"b2": 0
}
}
Run Code Online (Sandbox Code Playgroud)
MongoDB 生成错误,即MongoError: can't $divide by Zero。有谁可以建议我如何实现这一目标。任何帮助或建议都非常值得赞赏。预先感谢您的努力和互动。
小智 5
尝试用这个它有效!
{
"activity.score": {
$add: [
{
$multiply: [
"$activity.a1",
0.5
]
},
{
$multiply: [
"$activity.a2",
0.5
]
},
{
$multiply: [
"$activity.a3",
0.5
]
},
{
$multiply: [
"$activity.a4",
0.5
]
},
{
$multiply: [
"$activity.a5",
0.5
]
},
{
$multiply: [
{ $cond: [ { $eq: [ "$activity.b2", 0 ] }, 0, {
$divide: [
"$activity.b1",
"$activity.b2"
]
}
] }
,
0.5
]
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2123 次 |
| 最近记录: |