Je suis nouveau à MongoDB. J'essaie de lire les données de plusieurs collections. Je veux faire quelques statistiques sur GHTorrent, donc j'essaye d'imprimer un .csv avec les données qui m'intéressent. Le problème est que ma requête fonctionne depuis 30 minutes et je suis sûr que ma recherche est moins efficace que cela pourrait être, je ne suis pas sûr de savoir comment l'améliorer.Accélérez requête Python MongoDB
Tout d'abord, je
closed_issues = ghdb.issues.find(
{ "state": "closed" }, # query criteria
{ #projection
"id": 1,
"created_at": 1,
"closed_at": 1,
"comments": 1,
"repo": 1,
"owner": 1,
"number": 1,
}
Puis, après l'ouverture d'un fichier et la rédaction de titres, je
for issue in closed_issues:
countMentioned = ghdb.issue_events.find({
"issue_id": issue['number'],
"repo": issue['repo'],
"owner": issue['owner'],
"event": "mentioned" }).count();
countSubscribed = ghdb.issue_events.find({
"issue_id": issue['number'],
"repo": issue['repo'],
"owner": issue['owner'],
"event": "subscribed" }).count();
countAssigned = ghdb.issue_events.find({
"issue_id": issue['number'],
"repo": issue['repo'],
"owner": issue['owner'],
"event": "assigned" }).count();
time_created = parser.parse(issue['created_at'])
time_closed = parser.parse(issue['closed_at'])
timediff = time_closed - time_created;
f.write(
str(issue['id']) +","+
str(issue['number']) +","+
str(issue['repo']) +","+
str(issue['owner']) +","+
str(timediff.total_seconds()) +","+
str(issue['comments']) +","+
str(countMentioned) +","+
str(countSubscribed) +","+
str(countAssigned) +'\n'
)
Comme vous pouvez le voir, j'utiliser trois des quatre mêmes critères pour trois trouve par numéro. Quel est le moyen le plus efficace de faire une recherche pour une combinaison de issue_id
, repo
et owner
et de faire des comptes pour chacun des trois différents event
?