Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在pymongo中使用$push和$group 客观的_Python_Mongodb_Mongodb Query_Pymongo - Fatal编程技术网

Python 在pymongo中使用$push和$group 客观的

Python 在pymongo中使用$push和$group 客观的,python,mongodb,mongodb-query,pymongo,Python,Mongodb,Mongodb Query,Pymongo,修复mymake_pipeline()函数,使用聚合查询计算每个用户的tweet数,将其添加到数组中,并返回tweet最多的5个用户 运动 使用聚合查询,计算每个用户的tweet数量。 在相同的$group阶段,使用$push累积每个用户的所有tweet文本 将您的输出限制为5个推文最多的用户 结果文档应仅包括以下字段: “\u id”(用户的屏幕名称) “count”(为用户找到的推文数) “tweet\u text”(为用户找到的tweet文本列表) 背景 为了实现前面的目标,我正在测试

修复my
make_pipeline()
函数,使用聚合查询计算每个用户的tweet数,将其添加到数组中,并返回tweet最多的5个用户

运动 使用聚合查询,计算每个用户的tweet数量。 在相同的
$group
阶段,使用
$push
累积每个用户的所有tweet文本

将您的输出限制为5个推文最多的用户

结果文档应仅包括以下字段:

  • “\u id”
    (用户的屏幕名称)
  • “count”
    (为用户找到的推文数)
  • “tweet\u text”
    (为用户找到的tweet文本列表)
背景 为了实现前面的目标,我正在测试以下代码:

def make_pipeline():
    # complete the aggregation pipeline
    pipeline = [
        {"$group": {"_id": "$user.screen_name", "tweet_texts": {"$push": "$text"}, "count": {"$sum": 1}}},
        {"$project": {"_id": "$user.screen_name", "count": 1, "tweet_texts": 1}},
        {"$sort" : {"count" : -1}},
        {"$limit": 5}
    ]
    return pipeline
逻辑 首先,我根据
用户名对所有推文进行分组。然后,在同一阶段,我将所有发短信的tweet推到
tweet\u text
,并统计分组后的每个事件。我相信这会让我拥有最多推特的用户数量

然后我进行投影,仅选择我想要的三个字段:

  • _身份证
  • 计数
  • 推文
我通过排序和限制结果的数量来完成

问题 我通过了考试,但没有通过考试。我做错了什么? 我现在的错误肯定是在第一阶段(集体),但我无法发现我做错了什么

数据样本 请帮忙

由于管道已经只生成这三个字段,因此步骤是多余的,因此不需要前面的阶段


应安装正确的管道

pipeline = [ 
    {
        "$group": {
            "_id": "$user.screen_name", 
            "tweet_texts": { "$push": "$text" }, 
            "count": { "$sum": 1 }
        }
    }, 
    { "$sort" : { "count" : -1 } }, 
    { "$limit": 5 } 
] 
{"$project": {"_id": "$_id", "count": 1, "tweet_texts": 1}},
您的管道无法工作,因为之前的管道没有生成任何字段
“$user.screen\u name”
,您试图将其用作管道中的
\u id
字段

但是,如果希望包括步骤,则工作管道应遵循以下步骤:

pipeline = [ 
    {
        "$group": {
            "_id": "$user.screen_name", 
            "tweet_texts": { "$push": "$text" }, 
            "count": { "$sum": 1 }
        }
    }, 
    { "$project": { "count": 1, "tweet_texts": 1 } },
    { "$sort" : { "count" : -1 } }, 
    { "$limit": 5 } 
] 
步骤是多余的,因为管道已经只生成这三个字段,所以不需要前面的阶段


应安装正确的管道

pipeline = [ 
    {
        "$group": {
            "_id": "$user.screen_name", 
            "tweet_texts": { "$push": "$text" }, 
            "count": { "$sum": 1 }
        }
    }, 
    { "$sort" : { "count" : -1 } }, 
    { "$limit": 5 } 
] 
{"$project": {"_id": "$_id", "count": 1, "tweet_texts": 1}},
您的管道无法工作,因为之前的管道没有生成任何字段
“$user.screen\u name”
,您试图将其用作管道中的
\u id
字段

但是,如果希望包括步骤,则工作管道应遵循以下步骤:

pipeline = [ 
    {
        "$group": {
            "_id": "$user.screen_name", 
            "tweet_texts": { "$push": "$text" }, 
            "count": { "$sum": 1 }
        }
    }, 
    { "$project": { "count": 1, "tweet_texts": 1 } },
    { "$sort" : { "count" : -1 } }, 
    { "$limit": 5 } 
] 
阅读评论 读了这些评论,我发现

pipeline = [
        {"$group": {"_id": "$user.screen_name", "tweet_texts": {"$push": "$text"}, "count": {"$sum": 1}}},
        {"$project": {"_id": "$user.screen_name", "count": 1, "tweet_texts": 1}},
        {"$sort" : {"count" : -1}},
        {"$limit": 5}
    ]
事实上应改为:

pipeline = [ 
        {"$group": {"_id": "$user.screen_name", "tweet_texts": {"$push": "$text"}, "count": {"$sum": 1}}}, 
        {"$sort" : {"count" : -1}}, 
        {"$limit": 5}
    ]
为什么? 完整的答案和解释见答案:

故事的结论是我错误地使用了
$project
阶段。首先不仅不需要was,而且要使它成为幂等的,它应该是

pipeline = [ 
    {
        "$group": {
            "_id": "$user.screen_name", 
            "tweet_texts": { "$push": "$text" }, 
            "count": { "$sum": 1 }
        }
    }, 
    { "$sort" : { "count" : -1 } }, 
    { "$limit": 5 } 
] 
{"$project": {"_id": "$_id", "count": 1, "tweet_texts": 1}},
我也强烈推荐他的答案:

特别感谢 以下用户值得称赞++:

为我指引正确的道路

阅读评论 读了这些评论,我发现

pipeline = [
        {"$group": {"_id": "$user.screen_name", "tweet_texts": {"$push": "$text"}, "count": {"$sum": 1}}},
        {"$project": {"_id": "$user.screen_name", "count": 1, "tweet_texts": 1}},
        {"$sort" : {"count" : -1}},
        {"$limit": 5}
    ]
事实上应改为:

pipeline = [ 
        {"$group": {"_id": "$user.screen_name", "tweet_texts": {"$push": "$text"}, "count": {"$sum": 1}}}, 
        {"$sort" : {"count" : -1}}, 
        {"$limit": 5}
    ]
为什么? 完整的答案和解释见答案:

故事的结论是我错误地使用了
$project
阶段。首先不仅不需要was,而且要使它成为幂等的,它应该是

pipeline = [ 
    {
        "$group": {
            "_id": "$user.screen_name", 
            "tweet_texts": { "$push": "$text" }, 
            "count": { "$sum": 1 }
        }
    }, 
    { "$sort" : { "count" : -1 } }, 
    { "$limit": 5 } 
] 
{"$project": {"_id": "$_id", "count": 1, "tweet_texts": 1}},
我也强烈推荐他的答案:

特别感谢 以下用户值得称赞++:


为我指引正确的道路

我还是不明白这个错误。你从哪里又得到了错误?在你的$project中,不是应该是{“$project”:{“\u id”:1…}?你甚至需要这里的project阶段吗?没有语法错误,代码也不会爆炸。它根本不会返回预期的结果。它返回的用户显然不是推文最多的用户。至于$project,我相信我需要它,因为答案的格式只需要三个字段,而且因为我正在重命名{id字段。正确的管道应该是
pipeline=[{{{“$group”:{“{id”:“$user.screen\u name”,“tweet\u text”:{“$push”:“$text”},“count”:{“$sum”:1}},{“$sort”:{“count 1}{“$limit”:5}]
我还是不明白这个错误。你又是从哪里得到这个错误的?在你的$project中,它不应该是{“$project”:{“\u id”:1…}?你甚至需要这里的项目阶段吗?没有语法错误,代码也没有爆炸。它根本不会返回预期的结果。它返回的用户显然不是tweets最多的用户。至于$project,我相信我需要它,因为答案的格式只需要三个字段,而且因为我正在重命名_idfi正确的管道应该是
pipeline=[{“$group”:{“\u id”:“$user.screen\u name”,“tweet\u text”:{“$push”:“$text”},“count”:{“$sum”:1}},{“$sort”:{“count”:-1},{“$limit”:5}]
你真的必须在我即将发布我的答案的时候发布答案,对吗?:P无论如何,kudos++不用担心:)我没有得到通知来解释答案,因为输入了@chidram,但现在一切都好了,很高兴你找到了解决方案。你真的必须在我即将发布我的答案的时候发布答案吗?:P无论如何,kudos++不用担心:)我之前没有收到通知解释答案,因为输入了@chidram,但现在一切都好了,很高兴你找到了解决方案。