Les opérations d'écriture de fichier en script mongo?
est-ce possible d'écrire le résultat de la requête dans le fichier du script js mongo. J'ai beaucoup cherché, mais je n'ai pas trouvé de solution.
ex: -
cursor = db.users.find();
while(cursor.hasNext()) {
cursor.next();
// writing the cursor output to file ????<br/>
}
6 réponses
vous pouvez utiliser l'impression et rediriger la sortie:
"151920920 de script".js:cursor = db.users.find();
while(cursor.hasNext()){
printjson(cursor.next());
}
puis lancez le script et redirigez la sortie vers un fichier:
mongo --quiet script.js > result.txt
http://www.mongodb.org/display/DOCS/Scripting+la+shell paragraphe "les Différences entre l'écrit et interactive/ Impression".
./ mongo server.com/mydb -- quiet --eval " db.utilisateur.trouver.)(forEach (printjson);" > 1.txt
vous pouvez sauter la boucle while en utilisant forEach()
:
db.users.find().forEach(printjson);
ne serait-il pas plus simple d'utiliser l'un des pilotes Mongo pour un langage universel (comme Python, Ruby, Java, etc.) et d'écrire vos résultats dans un fichier de cette façon, dans un format que vous pouvez utiliser (comme CSV, etc.)?
mise à JOUR: , Selon la documentation de mongodump vous pouvez exporter une collection avec une requête:
$ ./mongodump --db blog --collection posts
-q '{"created_at" : { "$gte" : {"$date" : 1293868800000},
"$lt" : {"$date" : 1296460800000}
}
}'
cependant, vous auriez besoin d'importer cette collection retourne en MongoDB pour y opérer ou utiliser mongoexport pour exporter en tant que JSON ou CSV en utilisant le même drapeau d'interrogation ( -q
) que mongodump
.
pour distinct vous devez créer script.fichier js avec contenu:
mongo = new Mongo("localhost");
doctor = mongo.getDB("doctor");
users = doctor.getCollection("users");
cities = users.distinct("address.city");
printjson(cities);
puis en mode console:
mongo --quiet script.js > result.txt
chaque fois que j'ai besoin d'écrire le résultat d'une requête mongo dans un fichier local, j'utilise généralement la fonction writeFile(pathToFile, stringContents)
.
exemple: disons que vous devez rapidement trouver l'email de tous les utilisateurs enregistrés et l'Envoyer à votre buddy Jim dans le département de marketing.
$ mongo mongodb://my-fancy-mongo-server --ssl -u fancy_username -p fancy_password
successfully connected to my-fancy-mongo-server!
> emails = db.users.distinct('email_address')
> writeFile("jims_email_list.json", tojson(emails))
ou si Jim expect's est un fichier CSV alors
$ mongo mongodb://my-fancy-mongo-server --ssl -u fancy_username -p fancy_password
successfully connected to my-fancy-mongo-server!
> emails = db.users.distinct('email_address')
> writeFile("jims_email_list.csv", emails.join("\n"))
vous pouvez maintenant Envoyer à Jim la liste des e-mails et de sauver la journée!
à des choses importantes à noter à propos de la fonction writeFile
:
- le second argument doit être une chaîne.
- le premier argument doit être un fichier qui n'existe pas déjà, sinon vous obtiendrez une erreur.