您的位置:首页 > 编程语言 > Go语言

Mongoose读取集合数据始终返回空?关于Mongoose会自动添加的坑爹的"s"

2016-12-27 23:24 489 查看
在用Node.js+express+MongoDB搭建团队官网,说实话有点后悔用了MongoDB。虽然MongoDB基于文档的数据存储方式很让人心动,但是感觉数据的组织结构显得很混乱,对于用惯了Mysql的我来说感觉很不舒服。并且其实团队官网这种项目不适合用MongoDB 这种数据库,纯当学习吧。

今天在写后台管理页面的登录功能时遇到了一点问题,花费了至少7个小时,,,很心累。先简述一下背景:

1.数据库中有一个admin集合,注意,是admin,集合中的文档包含了username、password、name、rank

2.路由控制器中接受页面传来的username和password,对比数据库看是否成功登录。

以上就是简要背景,遇到的问题就是:无论怎么改代码,从数据库中取出的值始终是空的。

以下是代码:

//schema
var mongoose = require('mongoose');
var AdminSchema = new mongoose.Schema({
username: String,
password: String,
member: String,
rank: String
});
module.exports = AdminSchema;


//model
var mongoose = require('mongoose');
var AdminSchema = require('../schemas/admin');
var Admin = mongoose.model('Admin', AdminSchema);

/*
*
*  FUCK! FUCK MONGOOSE! FUCK MONGODB!!!!!
*  2016.12.27 an bug cost me more than 7 hours!!!!!
*
*  ATTENTION!!!!
*  Mongoose会自动给集合名加“s”
*  var Admin = mongoose.model('Admin’,userShema);
*  比如这个model('Admin’,userShema)中的Admin映射到Mongodb里就是admins
*  所以如果集合名为Admin,读取数据始终为空,改成Admins就好了!!!!!FUCK!!!!
*
*/

module.exports = Admin;
//route
var express = require('express');
var router = express.Router();
var Admin = require('../data/models/admin');

/* GET admin page. */
router.get('/', function(req, res, next) {
res.render('admin');
});

/* 处理登录 */
router.post('/login', function(req, res, next) {
Admin.find({}, function(err, docs) {
if(err) {
console.log("err");
}else {
console.log(docs);//打印结果始终为 []
}
})
});

module.exports = router;
以上就是三部分主要代码,route中的console.log(docs)始终打印空数组,检查了很多地方,没有任何问题,也百度了很多,一开始可能百度方式不对,,,后来百度到mongoose在创建model的时候,会自动添加s,如上述代码中的标红字体所示。所以其实一直读取的是admins集合,但是并没有这个集合,只有admin,最后把admin集合改名admins就好了。。。
真是神奇的特性,,,好生气,,,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐