arrays - 如何使用 MongoDB 根据数组元素对记录进行分组
问题描述
我有一个数据集合,其中包含以下格式的一组记录。
{
"_id" : 22,
"title" : "3D User Interfaces with Java 3D",
"isbn" : "1884777902",
"pageCount" : 520,
"publishedDate" : ISODate("2000-08-01T07:00:00Z"),
"thumbnailUrl" : "https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb-images/barrilleaux.jpg",
"longDescription" : "Description",
"status" : "PUBLISH",
"authors" : [
"Jon Barrilleaux"
],
"categories" : [
"Java",
"Computer Graphics"
]
},
{
"_id" : 23,
"title" : "Specification by Example",
"isbn" : "1617290084",
"pageCount" : 0,
"publishedDate" : ISODate("2011-06-03T07:00:00Z"),
"thumbnailUrl" : "https://s3.amazonaws.com/AKIAJC5RLADLUMVRPFDQ.book-thumb-images/adzic.jpg",
"status" : "PUBLISH",
"authors" : [
"Gojko Adzic"
],
"categories" : [
"Software Engineering"
]
}
请注意,“类别”是一个数组。
我想计算每个类别的已出版书籍。我尝试了以下解决方案,但它将整个数组视为一组。
db.books.aggregate([
{
$group:{_id:"$categories", total:{$sum:1}}
}
])
而不是这样,我想计算“类别”数组中每个单独类别值的记录数。
解决方案
您应该首先使用$unwind为数组中的每个元素输出一个文档。
db.books.aggregate([
{
$unwind : "$categories"
},
{
$group : { _id : "$categories", total: { $sum: 1 } }
}
])
推荐阅读
- sql - 在 SQL 中声明多个表变量时出错
- xamarin - 内容视图中图像源的 BindableProperty
- javascript - 无法从 firebase 获取嵌套子节点的数据?
- asp.net-core - 如何使用 .NET Core 自定义 Web API 中的错误响应?
- wordpress - ACF 的 Yoast 标题问题与 CPT 的关系
- asp.net - VB.NET 的跨站点脚本验证
- maven - Maven项目不会构建
- css - 如何更改 ionic 4 中的侧边菜单背景颜色?
- reactjs - Laravel 中的反应路由器
- javascript - Phonegap App 使用 Jquery mobile - 登录和个人资料页面。我需要知道phonegap的人