当前位置: 首页 > 知识库问答 >
问题:

Mongo DB聚合将书籍转换为作者数组

商兴朝
2023-03-14

我的藏书如下:

{
    "book": {
        "title": "Book1",
        "author": "Tom"
    },
    "quantity": 3
},
{

    "book": {
        "title": "Book2",
        "author": "Tom"
    },
    "quantity": 4
},
{

    "book": {
        "title": "Book3",
        "author": "Dick"
    },
    "quantity": 9
},
{

    "book": {
        "title": "Book4",
        "author": "Harry"
    },
    "quantity": 6
},
{

    "book": {
        "title": "Book5",
        "author": "Chris"
    },
    "quantity": 7
},
{

    "book": {
        "title": "Book6",
        "author": "Dick"
    },
    "quantity": 10
}

本藏书有书名、作者和数量的图书文献。

我想得到一些帮助,用聚合来输出作者的书籍和数量。例如,汤姆写了“Book1”和“Book2”,迪克写了“Book6”和“Book3”。

authors: [
    {
        "name": "Tom",
        "books": [
            {
                    "title": "Book1",
                    "quantity": "3"
            },
            {
                    "title": "Book2",
                    "quantity": "4"
            }
        ]
    },
    {
        "name": "Dick",
        "books": [
            {
                    "title": "Book6",
                    "quantity": "10"
            },
            {
                    "title": "Book3",
                    "quantity": "9"
            }
        ]
    },
    {
        "name": "Harry",
        "books": [
            {
                    "title": "Book4",
                    "quantity": "6"
            }
        ]
    }
]

共有2个答案

拓拔嘉颖
2023-03-14

尝试以下操作:

db.collection.aggregate([
    {
        $group: {
            _id: "$book.author",
            books: { $push: { "title": "$book.title", "quantity": "$quantity"} }
        },

    }
])

输出将为

/* 1 */
{
    "_id" : "Chris",
    "books" : [
        {
            "title" : "Book5",
            "quantity" : 7
        }
    ]
},

/* 2 */
{
    "_id" : "Harry",
    "books" : [
        {
            "title" : "Book4",
            "quantity" : 6
        }
    ]
},

/* 3 */
{
    "_id" : "Dick",
    "books" : [
        {
            "title" : "Book3",
            "quantity" : 9
        },
        {
            "title" : "Book6",
            "quantity" : 10
        }
    ]
},

/* 4 */
{
    "_id" : "Tom",
    "books" : [
        {
            "title" : "Book1",
            "quantity" : 3
        },
        {
            "title" : "Book2",
            "quantity" : 4
        }
    ]
}
尹昀
2023-03-14

试试这个聚合:

db.collection.aggregate([{
$group: {
  _id: "$book.author",
  books: {
    $push: {
      title: "$book.title",
      quantity: "$quantity"
    }
  }
}},{
$project: {
  "name": "$_id",
  "books": 1,
  "_id": 0
}}])

我在mongo游乐场试过:https://mongoplayground.net/p/m-QbX-uzkkt

 类似资料:
  • 我有一个R的聚合函数: 我想将这段代码转换成python并获取数据帧。我怎样才能做到?

  • 问题内容: 指定直方图聚合时,是否可以将字符串转换为浮点数?因为我的文档中的字段是浮点型的,但没有通过Elasticsearch解析,因此当我尝试使用字符串字段求和时,它将引发下一个错误。 我知道我可以更改映射,但是对于我有的用例,如果在编写字段的聚合时可以指定类似“ script:_value.tofloat()”的内容,则将更加方便。 这是我的代码: } 问题答案: 你需要这个 对于称为的字段

  • 我有以下收藏: 我试图将电影(及其所有细节)与用户状态和对该电影的感觉相匹配,并使用聚合: 其中返回: 我希望的结果是匹配user_status中的第一部电影,以获得最终结果: 我想我的下一步是: 但是它不起作用——不确定这个$addFields是否正确,我知道的一个问题是,我的第一个_id是一个ObjectId,第二个似乎是一个字符串。

  • 问题内容: 我编写了一些SQL查询,希望将其转换为关系代数。但是,某些查询使用聚合运算符,而我不知道如何转换它们。值得注意的是,它们使用COUNT和GROUP BY .. HAVING运算符。 这是模式: 水手( sid ,sname,评分)储备( sid , 出价 ,价格)船( 出价 ,bname) 这是我正在做的一个示例:查找恰好2个水手保留的所有船只的出价和名称。 允许的关系代数运算:选择,

  • 现有两个名为getDetails(…)的方法 。一个需要至少一个必需参数,另一个需要一个集合(不验证集合的内容/大小)。 问题是集合有时会作为空传递,并且根据我的业务案例,我总是期望至少传递一个值。因此,我需要将该方法设为私有,它接受集合。 我计划将下面的方法作用域设置为private,这样调用者就不会使用零属性调用此方法。 调用方方法之一是将集合对象传递给下面的getDetails, id.ge

  • 问题内容: 有什么简单的方法可以将数据库从mysql更改为mongoDB? 或更好的一个建议我好的教程做到这一点 问题答案: 有什么简单的方法可以将数据库从mysql更改为mongoDB? 方法#1 :以CSV格式从MySQL导出,然后使用mongoimport工具。但是,这在处理二进制数据的日期方面并不总是很好。 方法2 :使用您选择的语言编写传输脚本。基本上,您编写了一个程序,一次从MySQL