Ich versuche, eine Liste von DBS-Sammlungen mit Mungo zurückzugeben. Ich befolge die hier aufgeführten Anweisungen, aber http://grokbase.com/t/gg/mongoose-orm/122xxxr7qy/mongoose-get-a-list-of-all-collections . Also hier ist mein 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;
});
das einzige Problem ist, dass Namen als undefiniert zurückgegeben werden. Ist es sogar möglich, eine Liste von Sammlungen nur mit Vanille-Mungo zurückzugeben?
Versuchen Sie, die Funktion Sammlungsnamen nach der Verbindung auszuführen.
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;
});
})
Ich bin gerade auf diese Antwort gestoßen und obwohl sie zu dem Zeitpunkt, als sie scheint, funktioniert hat, wurde collectionNames
aus den verfügbaren Funktionsnamen zu Gunsten von listCollections
entfernt.
Dieser andere Stapelüberlaufposten hat ein Funktionsbeispiel: https://stackoverflow.com/a/29461274/4127352
Hier ist der Link zu den Originaldokumenten: http://mongodb.github.io/node-mongodb-native/2.0/meta/changes-fr-1.0/
So habe ich es geschafft, alle Namen der verbundenen Datenbank zu erhalten.
var mongoose = require('mongoose');
var collections = mongoose.connections[0].collections;
var names = [];
Object.keys(collections).forEach(function(k) {
names.Push(k);
});
console.log(names);
Diese Lösung funktioniert gut auf moose. 4.4.19 .
Wenn Sie nur mit Mongoose-Modellen arbeiten, brauchen Sie nur Folgendes:
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({});
});