mongodb - 是否可以在 mongodb 中列出其值小于另一个字段 10% 的元素列表?
问题描述
我基本上有一个数据库,用于记录摩托车及其行驶里程。
{
"motorcycle":"A",
"current_km":4600,
"review_km":5000
},
{
"motorcycle":"B",
"current_km":4000,
"review_km":5000
},
{
"motorcycle":"C",
"current_km":4900,
"review_km":5000
},
{
"motorcycle":"D",
"current_km":3000,
"review_km":5000
}
我有一个名为current_km
确定您当前里程的字段,我还有另一个名为 的字段 review_km
,它包含指定您的审核应该完成的里程,只要您当前的里程 ( current_km
) 大于里程审核 ( review_km
) 的 10%。
所以我想列出以下元素:
current_km
大于:
( review_km
- ( review_km
* 0.10))
例如:
current_km = 4600;
review_km = 5000;
result = 5000 - (5000 * 0.10);
4600 (current_km)> = 4500 (result) // in this case it is showed
在我的数据库中,它将显示摩托车 A 和 C 的结果
我该怎么做?我不知道是否可以直接在mongodb中进行。
解决方案
需要与$subtract
and一起使用聚合$multiply
,
$addFields
添加新字段,我们正在生成result
字段,方程(review_km - ( review_km * 0.10))
使用$subtract
和$multiply
$match
$expr
如果公式current_km >= result
正确,则返回文档
db.collection.aggregate([
{
$addFields: {
result: {
$subtract: [
"$review_km",
{
$multiply: [
"$review_km",
0.10
]
}
]
}
}
},
{
$match: {
$expr: {
$gte: [
"$current_km",
"$result"
]
}
}
}
])
工作游乐场:https ://mongoplayground.net/p/s2qenvuzLKF
较短的版本
如果您不希望
result
字段作为响应,则不再需要组合条件$match
和$addFields
db.collection.aggregate([
{
$match: {
$expr: {
$gte: [
"$current_km",
{
$subtract: [
"$review_km",
{
$multiply: [
"$review_km",
0.10
]
}
]
}
]
}
}
}
])
推荐阅读
- r - 如何在R中将点更改为逗号
- python - 如何使用 django-two-factor-auth 使用多个 _base.html 文件?
- javascript - GitHub 工作流未终止
- javascript - 如何解决 sinonJS 存根?
- java - 使用 javax.swing 进行降价
- typescript - syncfusion export pdf 显示切换按钮的状态
- ios - 如何在后续推送通知中保留通知服务扩展中的变量值
- python - 为什么在遍历列表矩阵时出现列表索引超出范围错误?
- android - 如何使用普通 Adlistener 调用所有覆盖仅在 Facebook 原生广告上调用 onAdloaded
- pandas - 我想合并列的所有条目,并将其放在每一列的一行中,如图所示