如何在mongodb中使用mapreduce?

时间:2014-11-20 06:27:09

标签: python mongodb mapreduce

我在python中有以下代码:

from pymongo import Connection
import bson

c = Connection()
db = c.twitter

ids = db.users_from_united_states.distinct("user.id")

for i in ids:
    count = db.users_from_united_states.find({"user.id":i}).count()
    for u in db.users_from_united_states.find({"user.id":i, "tweets_text": {"$size": count}}).limit(1):
    db.my_usa_fitness_network.insert(u)

我需要获取所有用户并找到每个用户的注册,其中tweets_text的数量等于它在集合中出现的次数(意味着该文档包含所有的推文,相同的用户发布)。 然后,我需要将它保存在另一个集合中,或者只是将它分组到同一个集合中。

当我运行此代码时,它为我提供了一些小于ids数字的文档

我看到了一些关于mapReduce的内容,但我无法弄清楚如何在我的情况下使用它。

我试图直接在mongodb上运行另一个代码,但它根本没用:

var ids = db.users_from_united_states.distinct("user.id")

for (i=0; i< ids.length; i++){
    var count = db.users_from_united_states.find({"user.id":ids[i]}).count()
    db.users_from_united_states.find({"user.id":ids[i], "tweets_text": {$size: count}).limit(1).forEach(function(doc){db.my_usa_fitness_network.insert(doc)})
}
你能帮帮我吗?我有一个庞大的项目,我需要帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

[
    {
        "$group": {
            "_id": "$user.id",
            "my_fitness_data": {
                "$push": "$text"
            }
        }
    },
    {
        "$project": {
            "UserId": "$_id",
            "TweetsCount": {
                "$size": "$my_fitness_data"
            },
            "Tweets": "$my_fitness_data"
        }
    }
    ]