De nombreuses fonctions d'assistance du shell ne sont pas disponibles pour l'exécution de code côté serveur. Dans le cas de printShardingStatus()
, cela a du sens car il n'y a pas de console à utiliser pour imprimer la sortie et vous préféreriez qu'une chaîne soit renvoyée. Heureusement, vous devriez pouvoir récupérer la source de la fonction shell et la réimplémenter dans votre application (par exemple, concaténer une chaîne renvoyée au lieu de l'imprimer directement).
$ mongo
MongoDB shell version: 2.2.0
connecting to: test
> db.printShardingStatus
function (verbose) {
printShardingStatus(this.getSiblingDB("config"), verbose);
}
Alors, regardons le printShardingStatus()
fonction...
> printShardingStatus
function (configDB, verbose) {
if (configDB === undefined) {
configDB = db.getSisterDB("config");
}
var version = configDB.getCollection("version").findOne();
// ...
}
Avant de transformer toutes les instructions de sortie en concaténation de chaînes, vous devez vous assurer que les autres méthodes de base de données sont toutes à votre disposition. En termes de performances, je pense que la meilleure option est de porter les entrailles de cette fonction vers Java et d'éviter complètement l'évaluation JS côté serveur. Si vous plongez plus profondément dans le printShardingStatus()
fonction, vous verrez qu'elle émet juste find()
sur la base de données de configuration avec certains group()
requêtes.
Si vous souhaitez vous en tenir à l'évaluation de JS et préférez ne pas conserver ce code dans votre application Java, vous pouvez également consulter stockage des fonctions JS côté serveur .