首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用mongodb对所有其他字段进行分组

使用mongodb对所有其他字段进行分组
EN

Stack Overflow用户
提问于 2013-10-16 14:49:10
回答 1查看 49关注 0票数 1

我的表结构如下:

租金:

代码语言:javascript
运行
复制
{
    '_id' : '1',
    'user_id' : 1,
    'item_id' : 6,
    'name' : "First rental",
}
{
    '_id' : '2',
    'user_id' : 2,
    'item_id' : 7,
    'name' : "Second rental",
}
{
    '_id' : '3',
    'user_id' : 2,
    'item_id' : 8,
    'name' : "Third rental",
}

我想要一份按用户分类的租金清单,如下:

代码语言:javascript
运行
复制
{
    'user' : '1',
    'rental_count': 1,
    'rentals' : [
        {
          '_id' : '1',
          'item_id' : 6,
          'name' : "First rental"
        }
    ]
    'user' : '2',
    'rental_count: 2',
    'rentals' : [
        {
          '_id' : '2',
          'item_id' : 7,
          'name' : "Second rental"
        },
        {
          '_id' : '3',
          'item_id' : 8,
          'name' : "Third rental"
        },
    ]
}

如何使用mongodb (如果必要的话,我可以使用聚合框架)。

我试过这样的方法:

代码语言:javascript
运行
复制
self.collection.aggregate([
    {'$group' => {_id: {user_id: '$user_id'},
      rental_items: {'$addToSet' => '$item_id'}
      rental_ids: {'$addToSet' => '$_id'}
    }
]},

但是它永远不会起作用,因为我在很多不同的集合中都有租金信息,而且我希望每个用户的所有租金都在一个数组中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-16 16:13:56

您发布的聚合查询似乎是正确的,只是您必须将一个对象传递给$addToSet

代码语言:javascript
运行
复制
db.rentals.aggregate({ "$group" : 
       { _id: "$user_id", 
         rental_count : {$sum : 1}, 
         rentals : {'$addToSet' : 
             { "item_id" : '$item_id', 
               "rental_id" : "$_id", 
               "name" : "$name" 
             } 
} } } );

给定您的示例数据,这将导致

代码语言:javascript
运行
复制
{
        "result" : [
                {
                        "_id" : 2,
                        "rental_count" : 2,
                        "rentals" : [
                                {
                                        "item_id" : 8,
                                        "rental_id" : "3",
                                        "name" : "Third rental"
                                },
                                {
                                        "item_id" : 7,
                                        "rental_id" : "2",
                                        "name" : "Second rental"
                                }
                        ]
                },
                {
                        "_id" : 1,
                        "rental_count" : 1,
                        "rentals" : [
                                {
                                        "item_id" : 6,
                                        "rental_id" : "1",
                                        "name" : "First rental"
                                }
                        ]
                }
        ],
        "ok" : 1
}

这没有您想要的确切名称,但更改它是最简单的部分,我不想窃取所有的乐趣:-)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19406612

复制
相关文章

相似问题

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