У меня есть следующий код в Python:Как использовать mapreduce в mongodb?
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)})
}
Можете ли вы помочь мне, пожалуйста? У меня огромный проект, и мне нужна помощь. Спасибо.
db.collection.find() и db.collection.count() являются асинхронными. Непосредственно на mongo (javascript) вам нужно использовать обратный вызов, чтобы дождаться результата для счета, прежде чем делать поиск. – joao
Я сохраняю значение count() в переменной, а затем выполняю поиск() ... –
, если моя догадка правильная, вы хотите, чтобы каждый пользователь и его счетчик твитов, ryt? – Ninad