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/>
}
44
demandé sur JohnAllen 2012-01-23 15:51:18

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
76
répondu milan 2012-01-23 15:13:32

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

22
répondu Roman Ivanov 2012-10-11 00:17:34

vous pouvez sauter la boucle while en utilisant forEach() :

db.users.find().forEach(printjson);
12
répondu Oubenal Mohcine 2014-09-29 18:38:04

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 .

3
répondu Darren Newton 2012-01-23 12:39:45

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
2
répondu 1nstinct 2015-06-08 10:59:27

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 :

  1. le second argument doit être une chaîne.
  2. le premier argument doit être un fichier qui n'existe pas déjà, sinon vous obtiendrez une erreur.
1
répondu fernandohur 2018-08-22 15:39:19