Essayer d’obtenir une liste des collections de mongoose

J’essaie de renvoyer une liste de collections dbs en utilisant de la mongoose. Je suis les instructions indiquées ici, mais http://grokbase.com/t/gg/mongoose-orm/122xxxr7qy/mongoose-get-a-list-of-all-collections . Alors voici mon code

var mongoose = require('mongoose'); //if (mongoose.connection.readyState == 0){//checks if already connected to the database console.log("creating connection to the database"); var Config = require('../configs/config'); var config = new Config(); config = config.getConfig().db.dev; if (mongoose.connection.readyState = 0 ) { mongoose.connect("mongodb://austin:[email protected]:10023/test1"); console.log('mongoose readyState is ' + mongoose.connection.readyState); } var collection; mongoose.connection.on('open', function (ref) { console.log('Connected to mongo server.'); }); //trying to get collection names mongoose.connection.db.collectionNames(function (err, names) { console.log(names); // [{ name: 'dbname.myCollection' }] module.exports.Collection = names; }); 

le seul problème est que les noms retournent comme indéfinis. Ainsi, est-il même possible de renvoyer une liste de collections en utilisant uniquement la mongoose à la vanille?

Essayez d’exécuter votre fonction de noms de collection après la connexion.

 mongoose.connection.on('open', function (ref) { console.log('Connected to mongo server.'); //trying to get collection names mongoose.connection.db.collectionNames(function (err, names) { console.log(names); // [{ name: 'dbname.myCollection' }] module.exports.Collection = names; }); }) 

Je viens tout juste de listCollections cette réponse et, même si cela a peut-être fonctionné au moment où il apparaît que collectionNames a été supprimé des noms de fonctions disponibles au profit de listCollections

Cet autre poste de débordement de stack a un exemple de travail: https://stackoverflow.com/a/29461274/4127352

Voici le lien vers les documents originaux: http://mongodb.github.io/node-mongodb-native/2.0/meta/changes-from-1.0/

Voici comment j’ai réussi à obtenir tous les noms sur la base connectée.

 var mongoose = require('mongoose'); var collections = mongoose.connections[0].collections; var names = []; Object.keys(collections).forEach(function(k) { names.push(k); }); console.log(names); 

Cette solution fonctionne bien sur la mongoose 4.4.19 .

Si vous travaillez uniquement avec des modèles Mongoose, c’est tout ce dont vous avez besoin:

 const connection = mongoose.connection; Object.keys(connection.models).forEach((collection) => { // You can get the ssortingng name. console.info(collection); // Or you can do something else with the model. connection.models[collection].remove({}); });