Trying to get a list of collections from mongoose

匿名 (未验证) 提交于 2019-12-03 02:20:02

问题:

I'm trying to return a list of a dbs collections using mongoose. I'm following the directions set out here but http://grokbase.com/t/gg/mongoose-orm/122xxxr7qy/mongoose-get-a-list-of-all-collections. So here is my 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:password1@paulo.mongohq.com: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;     }); 

the only problem is that names returns as undefined. So is it even possible to return a list of collections using just vanilla mongoose?

回答1:

Try running your collection names function after connection.

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;     }); }) 


回答2:

Just came across this answer and though it may have worked at the time it appears collectionNames has been removed from the available function names in favour of listCollections

This other stack overflow post has a working example: https://stackoverflow.com/a/29461274/4127352

Here is the link to the original docs: http://mongodb.github.io/node-mongodb-native/2.0/meta/changes-from-1.0/



回答3:

Here is how I managed to obtain all the names on the connected db.

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

This solution works good on mongoose 4.4.19.



回答4:

If you are only working with Mongoose Models, that is all you need:

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


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!