mongodb - 在 Mongo 中为字段获取不同的值
问题描述
我有一个数据库集合,这是它的文档结构。
{
_id: ObjectId("xxxxddsdsfdfdfdf")
category: electronics
sku: 10902
}
{
_id: ObjectId("dfdfdgfsdfdsgsf")
category: apparels
sku: 90345
}
{
_id: ObjectId("sdfdfdsggfgsgsdgsgsf")
category: electronics
sku: 10345
}
{
_id: ObjectId("dfndsnfkjdfdfsdnfsdf")
category: electronics
sku: 43435
}
我正在尝试查找每个类别的 SKU 总数。它应该消除重复并保持不同的值。例如,electronics: 3, apparels: 1
。
我写了一个查询,但它给了我一个跨类别的 SKU 总数,这根本不是预期的。
db.ecomm_sku_count.aggregate([
{
$group: {
_id: {
category: '$category',
sku_count: '$sku'
},
total_sku: {
$sum: 1
}
}
},
{
$count: "total_sku_units"
}
])
#output= [ { total_sku_units: 4 } ]
预期的输出必须有点像这样。
[
{ _id: { category: 'electronics', sku_count: 3 } },
{ _id: { category: 'apparels', sku_count: 1} }
]
我试图找到每个类别的不同 SKU 值。
我是 mongo 聚合框架的初学者。如果问题是菜鸟类型,请原谅我。
解决方案
我认为下面的代码是你正在寻找的:
db.collection.aggregate([
{
"$group": {
"_id": {
"category": "$category",
},
"total_sku": {
"$addToSet": "$sku"
}
},
},
{
"$project": {
"total_sku": {
"$size": "$total_sku"
}
},
},
])
推荐阅读
- python - SQLAlchemy 查询 filter_by 使用 OR
- sql - 查询可能很慢?
- flutter - 有问题 w/flutter mobx RadioListTile
- java - Apacher Hadoop , Apacher Hive on Apache Spark JAVA_9 common-lang 版本
- c++ - 如何在for循环c ++中调用变量
- python - 使用输出的一部分作为输入
- python - 我想访问 int64 数组列表中的元素
- ios - Ionic 5 带电容器“plugin_not_installed”
- ios - 比最大压缩进一步压缩 UIImage
- android - Android Studio 生成的 apk 安装但未打开