最近在用nodejs和mongodb写个论坛,在这里记录下遇到的一些坑。
连接mongodb时使用的是mongoose模块,安装和使用方法如下:
安装:
npm install mongoose --save
使用:
let mongoose = require('mongoose');
mongoose主要分为三个部分:schema(映射),model(模型),entity(实体),三者的关系是:schema生成model,model生成entity,其中model和entity可以对数据库进行操作,实例如下:
// 定义Schema UserSchema = new mongoose.Schema({ user: {// 真实姓名 type: String }, password: { // 密码 type: String }, shopCar: { type: Array, // default: [] } }, { collection: 'user'});
// 定义Model let UserModel = mongoose.model('user', UserSchema);
let TestEntity = new User({ user : req.query.user, password : req.query.password, shopCar: [] });坑提示::**其中在定义schema的时候,如果不加第二个参数,那么即使你在model中定义了表名为‘user’,mongoose会智能的在表名末尾添加一个's',那么你查询的表就会变成‘users’表,所以,为了安全,务必加上{collection:'table_name'}
坑提示::在接口的处理内,处理完后记得把数据库的连接关闭::mongoose.connection.close()。
建议:生成schema和model的代码单独放在一个文件中,module.export暴露model的接口,需要使用时在主文件中require即可,节约每次都要重新写的问题。
问题:在向数据库添加时可以使用
TestEntity.save(function(error,doc){ if(error){ console.log("error :" + error); }else{ console.log(doc); db.close(); } });entity对象尽量每个schema对象定义的key都写上,不然又可能会添加失败
提示:save要重启数据库才会看到添加后的数据
提示:如果想要查询一个表的所有数据,可以使用如下方法:
User.find({}, function (error, docs) { if(error) { console.log("error :" + error); } else { console.log(docs);
})