我刚刚开始学习MongoDB和mongoose。目前我有以下结构:
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');
});
}
我的-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()
返回>>>>
那我在这里做错了什么?为什么我的控制台日志中没有任何数据?提前感谢您的帮助。
答案 0 :(得分:21)
默认情况下,mongoose采用单个模型名称并将它们与以其复数形式命名的集合配对,因此mongoose在数据库中查找名为“adminLogins”的集合,该集合不存在。您可以在定义架构时将集合名称指定为第二个参数:
var adminLogin = new Schema({
username: String,
password: String
}, {collection: 'adminLogin'});
答案 1 :(得分: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”,因为mongo使用模型的复数命名集合,对不起我的英文......
答案 2 :(得分:0)
在将其注入到我的api的快速路由中时遇到了问题,因此我通过@elkhrz对其进行了更改,方法是先定义架构,然后编译一个我想要拉的模型:
app.get('/lists/stored-api', (req, res) => {
Apis.find(function(err, apis) {
if (err) return console.error(err);
res.send(apis);
});
});
我不会将其发送给主体,实际上我会对其进行其他处理,尤其是如果您打算将API设为基于生产的应用程序。
解决此问题,并阅读呈现数据的可能适当方法: How to Pass Data Between Routes in Express
在处理数据时始终应遵循安全的程序。