mongoose
安装
npm install mongoose
创建 db.js
参考:
http://mongoosejs.com/docs/api.html
var mongoose = require('mongoose'), DB_URL = 'mongodb://localhost:27017/mongoosesample'; /** * 连接 */ mongoose.connect(DB_URL); /** * 连接成功 */ mongoose.connection.on('connected', function () { console.log('Mongoose connection open to ' + DB_URL); }); /** * 连接异常 */ mongoose.connection.on('error',function (err) { console.log('Mongoose connection error: ' + err); }); /** * 连接断开 */ mongoose.connection.on('disconnected', function () { console.log('Mongoose connection disconnected'); }); module.exports = mongoose;
创建model (相当于建表)
var mongoose = require('./dbconfig.js'), Schema = mongoose.Schema; var UserSchema = new Schema({ username : { type: String,index:true }, //用户账号 userpwd: {type: String}, //密码 userage: {type: Number}, //年龄 logindate : { type: Date,default:Date.now} //最近登录时间 }); module.exports = mongoose.model('User',UserSchema);
插入数据
/** * Created by lzhan on 2017/10/9. */ var User = require("./model-user.js"); /** * 插入 */ function insert() { var user = new User({ username : 'Tracy McGrady', //用户账号 userpwd: 'abcd', //密码 userage: 38, //年龄 logindate : new Date() //最近登录时间 }); user.save(function (err, res) { if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }); } insert();
更新数据
var User = require("./user.js"); function update(){ var wherestr = {'username' : 'Tracy McGrady'}; var updatestr = {'userpwd': 'zzzz'}; User.update(wherestr, updatestr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } update();
这种更新只会更新最先匹配的一条数据,如果要更新所有满足条件的数据,则:
User.update(wherestr, updatestr, {multi:true},function(err, res){
- Model.findByIdAndUpdate(id, [update], [options], [callback])
- Model.findOneAndUpdate([conditions], [update], [options], [callback])
删除数据
var User = require("./user.js"); function del(){ var wherestr = {'username' : 'Tracy McGrady'}; User.remove(wherestr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } del();
Model.findByIdAndRemove(id, [options], [callback])
Model.findOneAndRemove(conditions, [options], [callback])
查询数据
var User = require("./user.js"); function getByConditions(){ var wherestr = {'username' : 'Tracy McGrady'}; var opt = {"username": 1 ,"_id": 0}; User.find(wherestr, opt, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getByConditions();
输出只会有username字段,设置方法如上,1表示查询输出该字段,0表示不输出
User.find({userage: { gte:21, lte: 65}}, callback); //这表示查询年龄大于等21而且小于等于65岁
$or 或关系 $nor 或关系取反 $gt 大于 $gte 大于等于 $lt 小于 $lte 小于等于 $ne 不等于 $in 在多个值范围内 $nin 不在多个值范围内 $all 匹配数组中多个值 $regex 正则,用于模糊查询 $size 匹配数组大小 $maxDistance 范围查询,距离(基于LBS) $mod 取模运算 $near 邻域查询,查询附近的位置(基于LBS) $exists 字段是否存在 $elemMatch 匹配内数组内的元素 $within 范围查询(基于LBS) $box 范围查询,矩形范围(基于LBS) $center 范围醒询,圆形范围(基于LBS) $centerSphere 范围查询,球形范围(基于LBS) $slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
模糊查询
function getByRegex(){ var whereStr = {'username':{$regex:/m/i}}; User.find(whereStr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getByRegex();
上面示例中查询出所有用户名中有’m’的名字,且不区分大小写,模糊查询比较常用,正则形式匹配,正则方式就是javascript正则,用到的比较多
统计数量
function getCountByConditions(){ var wherestr = {}; User.count(wherestr, function(err, res){ if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getCountByConditions();
分页排序
function getByPager(){ var pageSize = 5; //一页多少条 var currentPage = 1; //当前第几页 var sort = {'logindate':-1}; //排序(按登录时间倒序) 值:-1或者1 var condition = {}; //条件 var skipnum = (currentPage - 1) * pageSize; //跳过数 User.find(condition).skip(skipnum).limit(pageSize).sort(sort).exec(function (err, res) { if (err) { console.log("Error:" + err); } else { console.log("Res:" + res); } }) } getByPager();
其他方法
Model.distinct(field, [conditions], [callback]) //去重 Model.findOne(conditions, [fields], [options], [callback]) //查找一条记录 Model.findOneAndRemove(conditions, [options], [callback]) //查找一条记录并删除 Model.findOneAndUpdate([conditions], [update], [options], [callback]) //查找一条记录并更新
补充-数据库服务器权限