首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mongo DB聚合将图书转换为作者数组

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

Stack Overflow用户
提问于 2020-02-21 15:06:27
回答 2查看 210关注 0票数 1

我的藏书是这样的:

代码语言:javascript
运行
复制
{
    "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“。

代码语言:javascript
运行
复制
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"
            }
        ]
    }
]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-21 15:23:03

尝试此聚合:

代码语言:javascript
运行
复制
db.collection.aggregate([{
$group: {
  _id: "$book.author",
  books: {
    $push: {
      title: "$book.title",
      quantity: "$quantity"
    }
  }
}},{
$project: {
  "name": "$_id",
  "books": 1,
  "_id": 0
}}])

我在芒果游乐场上尝试过:https://mongoplayground.net/p/m-QbX-uzkkt

票数 1
EN

Stack Overflow用户

发布于 2020-02-21 15:14:56

如下所示进行尝试:

代码语言:javascript
运行
复制
db.collection.aggregate([
    {
        $group: {
            _id: "$book.author",
            books: { $push: { "title": "$book.title", "quantity": "$quantity"} }
        },

    }
])

输出将是

代码语言:javascript
运行
复制
/* 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
        }
    ]
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60333668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档