node.js - 文档字段总和 mongodb
问题描述
我需要使用以下逻辑查找某些指定字段的总和: Find document where sum of (score_one.1+ score_one.2 + score_one.3 + score_one.4 + score_one.5) <= 6
。
文档结构如下所示:
{
_id: ObjectId("5ce12e56937edb2b008631ec"),
date: "2011-8-3",
league: "American League",
team_names: "Texas at Detroit",
team_one: "TEX",
score_one: {
1: 0,
2: 0,
3: 0,
4: 2,
5: 1,
6: 0,
7: 0,
8: 0,
9: 1,
T: "TEXT",
R: 4,
ML: -115,
O/U: "",
H: 10,
E: 1
},
team_two: "DET",
score_two: {
...
}
}
如何在 MongoDB 中执行此查询?
解决方案
如果您正在对一组非常特定的字段进行操作,则可以$sum
在这些特定字段上使用运算符。该$addFields
阶段根据某个表达式的结果向管道中的所有文档添加任意数量的新字段。在这种情况下,我们对指定的字段进行求和,前缀$
为表示现有文档字段,并将结果存储在新field_total
字段中。$match
然后,我们对修改后的文档执行 a以仅通过使用运算符(小于或等于)获取field_total
具有最大值为 a的文档。最终的管道看起来像这样:6
$lte
db.collection.aggregate([
{$addFields: {
field_total: {$sum: [
"$score_one.1",
"$score_one.2",
"$score_one.3",
"$score_one.4",
"$score_one.5"
]}
}},
{$match: {
field_total: {$lte: 6}
}}
]);
推荐阅读
- python - 从熊猫数据框列中提取特定值
- php - 在另一个视图中包含一个带有变量的视图(Laravel 的 5.6 - Blade)
- spring-boot - 使用 Project Reactor 中的 ExchangeFunction 从 ClientRequest 下载并保存文件
- linux - Why the RUN command in this dockerfile is not working
- java - Java & SQL - 无法在我的主键和外键中创建重复值
- c - 如何修改 CMakeList.txt:找到库,但存在链接错误
- php - 获取 PHP 数组的值
- mapbox - Mapbox 不会隐藏特定缩放级别的标记
- oop - 绘制 UML 类图时将行为放在正确的类中
- python - 如何在 Pandas 中查找空数据时间