2013-10-28 2 views
7

Я только начал изучать MongoDB и мангуста. В настоящее время я иметь следующую структуру:Как получить данные из MongoDb с помощью мангуста?

database -> skeletonDatabase 
collection -> adminLogin 

Когда я бегу db.adminLogin.find() из командной строки я получаю:

{ "_id" : ObjectId("52lhafkjasfadsfea"), "username" : "xxxx", "password" : "xxxx" } 

Моя связь(это работает, просто добавив его FYI)

module.exports = function(mongoose) 
{ 
    mongoose.connect('mongodb://localhost/skeletonDatabase'); 

    var db = mongoose.connection; 
    db.on('error', console.error.bind(console, 'connection error:')); 
    db.once('open', function callback() { 
     console.log('Conntected To Mongo Database'); 
    }); 
} 

My -js-

module.exports = function(mongoose) 
{ 
    var Schema = mongoose.Schema; 

    // login schema 
    var adminLogin = new Schema({ 
     username: String, 
     password: String 
    }); 

    var adminLoginModel = mongoose.model('adminLogin', adminLogin); 
    var adminLogin = mongoose.model("adminLogin"); 

    adminLogin.find({}, function(err, data){ 
     console.log(">>>> " + data); 
    }); 
} 

Мои console.log() возвращается как >>>>

Так что я здесь делаю неправильно? Почему я не получаю никаких данных в моем консольном журнале? Заранее благодарю за любую помощь.

ответ

19

mongoose по умолчанию принимает уникальные имена моделей и связывает их с коллекцией, названной с множественным числом, поэтому mongoose ищет в db для коллекции под названием «adminLogins», которой не существует. Вы можете указать имя коллекции в качестве 2-го аргумента при определении вашей схемы:

var adminLogin = new Schema({ 
    username: String, 
    password: String 
}, {collection: 'adminLogin'}); 
+2

Это ужасная анти-особенность. Кажется, я видел разговоры о github о том, чтобы положить конец этому в будущем выпуске. Если вы используете экспресс, 'res.send (data)', чтобы отправить его в браузер, и все готово. –

+1

Приятно знать, да, я использую экспресс. Но я тоже немного туман. Я пробовал использовать 'res.send (data)', но не мог понять, как вся работа отклика должна работать. У меня есть my app.configure global вместе с моим соединением mongoose. Поэтому я использую 'require()', но не был уверен, как передать запрос через него. –

+0

Спасибо @PeterLyons, его отлично работает .. Спасибо еще раз :) –

0

первый декомпилировать просто один модели со схемой в качестве аргумента

var adminLogin = mongoose.model('adminLogin', adminLogin);

в программном коде adminLogin не делает существует, adminLoginModel делает;

после этого, вместо того, чтобы

adminLogin.find({}, function(err, data){ 
     console.log(">>>> " + data); 
    }); 

попробовать это

adminLogin.find(function (err, adminLogins) { 
    if (err) return console.error(err); 
    console.log(adminLogins); 

важен «s», так как Монго использовать множественное число от модели назвать коллекцию, простите за мой английский ..

Смежные вопросы