./model/db.js
// 引入mongoose const mongoose = require("mongoose"); //解决index索引引起的弃用提醒:(node:13616) DeprecationWarning: collection.ensureIndex is deprecated. Use createIndexes instead. mongoose.set("useCreateIndex", true); // 连接数据库 mongoose.connect("mongodb://127.0.0.1:27017/jtdb", { useNewUrlParser: true, useUnifiedTopology: true }, function (err, connection) { if (err) { console.log(err); return; } console.log("连接数据库成功"); }); module.exports = mongoose;
./model/users.js
/* mongoose 的自定义修饰符: Getters 与 setters 除了mongoose内置修饰符以外,还可以通过 set (建议使用) 修饰符,对增加数据的时,对数据进行格式化; 也可以通过 get(不建议使用)在 实例获取数据 的时候 对 实例数据 进行格式化。 */ var mongoose = require("./db.js"); var userSchema = mongoose.Schema({ sn: { type: Number, // unique: true, //唯一索引 index: true, //普通索引,设定了索引的字段,是必须传入的 }, name: { type: String, upperCase: true, //全部大写 // lowerCase: true,//全部小写 get(params) { return "get加在前面的:" + params; }, }, title: { type: String, maxlength: 200, //最大长度 minlength: 1, //最小长度 required: true, //必填字段 trim: true, //去除左右空格 }, age: { type: Number, max: 150, //最大值 min: 0, //最小值 }, redirect: { type: String, // 自定义修饰符: set方法是在增加数据的时候对redirect字段进行处理 set(parmas) { //parmas参数可以获取redirect的值 、 返回的数据就是redirect在数据库实际保存的值 // if (!parmas) return parmas; if (!parmas) { return ""; } else { if (parmas.indexOf("http://") != 0 && parmas.indexOf("https://") != 0) { return "http://" + parmas; } return parmas; } }, }, status: { try: Number, default: 0, //默认填充 }, }); //静态方法 使用 statics 通过静态方法来扩展 mongoose Model ---------------------- userSchema.statics.findBySn = function (sn, cb) { // 通过 find 方法获取 sn 的数据 , this 关键字获取当前的 model this.find({ sn: sn }, function (err, data) { cb(err, data); }); }; userSchema.statics.findByage = function (age, cb) { // 通过 find 方法获取 sn 的数据 , this 关键字获取当前的 model this.find({ age: age }, function (err, data) { cb(err, data); }); }; // ------------------------------------------------------------------ // 实例方法 使用 methods , (没多大用,基本不用) -------------------------------------- userSchema.methods.print = function () { var a1 = "这是a1"; console.log("我是实例方法"); //直接输出 console.log(this.a1); //undefind console.log(this); //this指向 user.js 中声明的 user ; console.log(this.age); }; // ------------------------------------------------------------------ module.exports = mongoose.model("User", userSchema, "users");
user.js
var UserModel = require("./model/user.js"); // ./model/user.js 中 userSchema 的 name 里的 get 对实例进行操作 // var user = new UserModel({ sn: 1, name: "孙悟空", age: 40, title: "齐天大圣" }); var user = new UserModel({ sn: 6, age: 40, title: "猪八戒" }); // console.log(user.age); //20 // console.log(user.name); // get加在前面的:赵六 // 在./model/user.js 中 自定义的实例方法 user.print() // UserModel.find({}, function (err, data) { // if (err) return console.log(err); // console.log(data); // }); // 在./model/user.js 中自定义扩展的方法 findBySn // UserModel.findBySn("3",function (err, data) { // if (err) return console.log(err) // console.log(data) // }) // 在./model/user.js 中自定义扩展的方法 findByage // UserModel.findByage("40", function (err, data) { // if (err) return console.log(err); // console.log(data); // }); // user.save(function (err, data) { // if (err) return console.log(err); // console.log(data); // }); /* PS D:\nodeDemo\mongoose02> node .\user.js 20 get加在前面的:赵六--【按顺序执行完了实例的代码才执行数据库的连接】 连接数据库成功 [ { _id: 5ffc15140e5352204c72840e, name: '张三', age: 20, __v: 0 }, { _id: 5ffc1adc0c7993265064ef22, name: '李四', age: 20, __v: 0 } ] */