首页 > 解决方案 > MongoDB count 总共三个字段

问题描述

我是 MongoDB 的初学者。我在 MongoDB 集合中有 2000 万个文档。单个文档的示例:

在此处输入图像描述

我想获取每个 user_screen_name 的总推文计数、朋友计数和关注者计数以及每个 user_screen_name 的帐户创建年份。

我试过这个:

user_details_pipeline = [{
    "$project": {
        "_id": 0,
        "user_mentions": 1,
        "user_followers_count": 1,
        "user_friends_count": 1,
        "user_account_creation": 1
    }
}, {
    "$unwind": "$user_mentions"
}, {
    "$group": {
        "_id": "$user_mentions.screen_name",
        "count": {
            "$sum": 1
        }
    }
}, {
    "$sort": {
        "count": -1
    }
}
]

但这不会查询推文、关注者、朋友和帐户创建日期的数量,只查询用户被提及的次数。有人可以帮忙吗?

一个输出示例:

{"user_screen_name": "BorisJohnson", "user_followers_count": 1000000, "user_friends_count": 50, "total_tweets": 50000, "user_account_creation": 2012}

标签: pythonmongodbpymongo

解决方案


如果您的日期不是日期类型(它确实应该是!),您可以使用以下聚合查询,使用$substr(切出年份)和$min(获取最早的年份)

result = db.mycollection.aggregate([
    {'$group': {
        '_id': '$user_screen_name',
        'user_followers_count': {'$sum': '$user_followers_count'},
        'user_friends_count': {'$sum': '$user_friends_count'},
        'total_tweets': {'$sum': '$user_tweets_count'},
        'user_account_creation': {'$min': {'$substr': ['$user_account_creation', 26, 4]}}
    }},
    {'$project': {
        '_id': 0,
        'user_screen_name': '$_id',
        'user_followers_count': 1,
        'user_friends_count': 1,
        'total_tweets': 1,
        'user_account_creation': 1
    }}
])

推荐阅读