mongodb-query - 初学者试图了解聚合是如何工作的
问题描述
在我们的 SQL 初学者课程中,最后一件事是向其他几个 DB:s 倾斜我们的脚趾,我选择了 MongoDB。作为奖励回合,我能做的最后也是“最难”的事情是将此 sqlite 命令转换为 MongoDB 集合行。
sqlite> SELECT ore, COUNT(*), MAX(price) FROM Database GROUP BY ore;
我用这些值创建了数据库:
db.Database.insertMany( [
{ biome: "Desert", ore: "Silver", price: 8000 },
{ biome: "Forest", ore: "Gold", price: 5000 },
{ biome: "Meadow" , ore: "Silver", price: 7000 },
{ biome: "Swamp", ore: "Bronze", price: 6000 },
{ biome: "Mountains", ore: "Gold", price: 9000 },
{ biome: "Arctic" , ore: "Gold", price: 6500 }
] )
所以,是的......我一直在阅读有关管道和聚合操作的信息,但它在我的脑海中飘过 xP。这对本课程来说并不重要,但我很想了解这是如何进行的。我的学校有一个非常糟糕的习惯,就是用我们的母语教授所有东西,即使没有一个头脑正常的人会在现实生活中使用那个术语。这使我在尝试自学时有时很难学习这些东西。如果有人想举任何例子,我将不胜感激!
最终结果应如下所示:
sqlite> SELECT ore, COUNT(*), MAX(price) FROM Database GROUP BY ore;
ore COUNT(*) MAX(price)
---------- ---------- -----------
Silver 2 8000
Bronze 1 6000
Gold 3 9000
解决方案
你要找的是$group
舞台。
该$group
阶段用于根据一个或多个键对集合中的多个文档进行分组。您可以在此处了解有关此管道阶段的更多信息。
您将在 Group 阶段的键中提及要分组的_id
键。其余所有键都是用户定义的,可以使用 MongoDB 的内置运算符累积。在您的情况下,您可以使用$sum
运算符并传入值1
以将一个值添加到每个分组文档的用户定义count
键中。要找到最高价格,请使用$max
键并传入 $price
(注意$
前缀,因为您在源文档中自引用键)以获得单个组的最大值。
db.collection.aggregate([
{
"$group": {
"_id": "$ore",
"count": {
"$sum": 1
},
"max": {
"$max": "$price"
}
},
},
])
推荐阅读
- java - 如果在 Windows 上禁用了网络适配器,如何使用 Java 以编程方式检查?
- ios - 如何在没有任何设备边框或全屏安全区域的情况下在 IB 中查看 UIView?
- python - 过滤和操作 Pandas 数据框中的“无”或“空”行
- c# - 在第二个脚本上调用时,Unity 中的静态值“丢失”
- nlp - 槽填充意图检测联合模型
- excel - 添加日期导致午夜过后的时间
- kotlin - 具有多个参数的 Kotlin setter
- javascript - 与符号匹配的正向前瞻字符串
- intellij-idea - 确定 IntelliJ/JetBrains 的 ANTLR v4 语法插件使用的 ANTLR 版本
- cmake - 带有工具链文件和 cmake_policy 的 CMAKE