2012-01-05 4 views
1

J'ai un couple d'identifiants dans mon document de base de données mongodb. J'ai besoin de créer des index sur ces ID via un script afin que je n'aie pas à exécuter la commande ensureIndex encore et encore. Je viens d'exécuter le script (qui contient toutes ces commandes) et je devrais avoir terminé. Une idée de comment lancer un script depuis un shell mongodb? Aussi, quelle devrait être l'extension du script?Exécution d'un script ayant des requêtes mongodb à partir du shell mongodb

Juhi.

+0

Voulez-vous l'exécuter à nouveau, ou quoi? –

+1

Vous devriez accepter des réponses utiles, d'ailleurs. –

Répondre

12

Vous pouvez placer vos commandes dans un fichier javascript (avec l'extension .js) et utiliser l'utilitaire de console mongo pour l'exécuter. Comme ceci:

mongo --host my_host --port my_port my_db create_indexes.js 

Où fichier create_indexes.js contiendra vos commandes:

db.getCollection("elements").ensureIndex({customerId:1}); 
db.getCollection("elements").ensureIndex({userId:1}); 
.... 
+0

Ouais, aussi jeter un oeil ici pour quelques pointeurs: http://www.mongodb.org/display/DOCS/Scripting+the+shell –

+0

Fonctionne bien pour moi .. :) BTW .. Est-ce que ça va bien dans un Sharded l'environnement? Je veux dire que si je le lance sur le shell mongos, est-ce que ça réfléchira sur les fragments que je suis en train de courir ou devrais-je lancer le .js séparément sur mes fragments? – juhi

+0

Si vous l'exécutez sur 'mongos', il s'exécutera sur tous les fragments. –

8

Vous pouvez également exécuter le script à partir du shell MongoDB. J'aime ajouter des choses à une fonction pour qu'il soit pratique de les appeler. Créez le script comme ceci:

var ensureIndexes = function() { 
    db.getCollection("elements").ensureIndex({customerId:1}); 
    db.getCollection("elements").ensureIndex({userId:1}); ........ 
} 

Enregistrer ci-dessus dans un fichier nommé ensureIndexes.js, puis à partir du shell mongo entrez:

load('ensureIndexes.js') 

Maintenant, vous serez en mesure d'entrer ensureIndexes() d'appeler cette fonction . J'ai beaucoup de scripts contenant des fonctions d'utilité comme ça.

+0

C'est une bonne astuce pour travailler avec, qui assurera nos fonctions personnalisées autres que les fonctions js fournies par le shell mongodb .. :) BTW ... Est-ce que ça va fonctionner dans un environnement Sharded? Je veux dire que si je le lance sur le shell mongos, est-ce que ça réfléchira sur les fragments que je suis en train de courir ou devrais-je lancer le .js séparément sur mes fragments? – juhi

+1

@juhi Oui, vous pouvez le faire. Voir cette page: http://www.mongodb.org/display/DOCS/Server-side+Code+Execution en particulier la section sur le stockage des scripts côté serveur. Vous pouvez ensuite les exécuter n'importe où. – dlaidlaw

+0

vraiment comme cette astuce! Merci! – the0ther

4

Si vous utilisez un système d'exploitation unix, cela peut aider. J'ai effectué une redirection en utilisant un shell Unix.

donc de la ligne de commande UNIX vous tapez:

mongo < your_script.js 

A l'intérieur des your_script.js vous pouvez indiquer vos commandes.