node——21-mongoose 增删改查 和 Schema 类型及定义例子

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

// 1. 连接数据库
// 指定连接的数据库不需要存在,当你插入一条数据之后就会自动被创建出来
mongoose.connect('mongodb://localhost/myDb');

// 2. 设计集合结构(表结构)
// 字段名称就是表结构中的属性名称
// 约束的目的是为了保证数据的完整性,不要有脏数据
var userSchema = new Schema({
    userName: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    }, email: {
        type: String,
    }
});

// 3. 将文档结构发布为模型
//    mongoose.model 方法就是用来将一个架构发布为 model
//    第一个参数:传入一个大写名词单数字符串用来表示数据库名称
//                mongoose 会自动将大写名词的字符串生成 小写复数 的集合名称
//                例如这里 User 最终会变为 users 集合名称
//    第二个参数:架构 Schema
//
//    返回值:模型构造函数
var User = mongoose.model('User', userSchema);

// 4. 当有了模型构造函数,就可以操作 users 集合中的数据了(增删改查)

增加数据

var admin = new User({
    userName: 'admin1',
    password: 123,
    email: '[email protected]'
});

admin.save(function (err, ret) {
    if (err) {
        console.log('error');
    } else {
        console.log('success');
        console.log(ret);
    }
});

删除数据

根据条件删除所有:

User.remove({
    userName: 'admin1'
}, function (err, ret) {
    if (err) {
        console.log('error');
    } else {
        console.log('success');
        console.log('ret');
    }
});

根据条件删除一个:

Mondel.findOneAndRemove([conditions],[options],[callback])

根据 id 删除一个:

Mondel.findByIdAndRemove(id,[options],[callback])

改动数据

根据条件更新所有:

Model.update([conditions],doc,[options],[callback])

根据指定条件更新一个:

Model.findOneAndUpdate([conditions],[update],[options],[callback])

根据 id 更新一个:

Model.findByIdAndUpdate(id,[update],[options],[callback])

User.findByIdAndUpdate('5c78c61cdf8ab14a3c96b4c7', {
    userName: 'lucy',
    password: '123234345456',
}, function (err, ret) {
    if (err) {
        console.log('error');
    } else {
        console.log('success');
        console.log(ret);
    }
});

数组数据添加: 数组数据删除等更多方法

// 主要是 $push
Goods.findByIdAndUpdate(comment.goodsId, {
      $push: {
        comment: {
          time: comment.time,
          content: comment.content,
          person: comment.person,
        }
      }
    })

查询数据

查询所有数据:

User.find(function (err, ret) {
    if (err) {
        console.log('error');
    } else {
        console.log('success');
        console.log(ret);
    }
});

查询符合条件的所有:

User.find({
    userName: 'admin1'
}, function (err, ret) {
    if (err) {
        console.log('error');
    } else {
        console.log(ret);
    }
});

查询符合条件的第一个:

User.findOne({
    userName: 'admin1'
}, function (err, ret) {
    if (err) {
        console.log('error');
    } else {
        console.log(ret);
    }
});

补充:

// 对于字符串类型的 id 查询办法,先用下面方法转换为 ObjectId 类型
let findGoods =await Goods.findOne({ _id: Object('5cbeed5eeb6f091054e5cefb') })

链式编程

// With a JSON doc
Person.
  find({
    occupation: /host/,
    'name.last': 'Ghost',
    age: { $gt: 17, $lt: 66 },
    likes: { $in: ['vaporizing', 'talking'] }
  }).
  limit(10).
  skip(4).
  sort({ occupation: -1 }).
  select({ name: 1, occupation: 1 }).
  exec(callback);

// Using query builder
Person.
  find({ occupation: /host/ }).
  where('name.last').equals('Ghost').
  where('age').gt(17).lt(66).
  where('likes').in(['vaporizing', 'talking']).
  limit(10).
  skip(4).
  sort('-occupation').
  select('name occupation').
  exec(callback);

Schema 类型及定义例子

let mongoose = require('mongoose');
let autoIncrement = require('mongoose-auto-increment-fix');  //用这个fix版本,可以避免在mongodb 3.2以上的版本报错。
 
let Schema = mongoose.Schema;
 
let accountSchema = new Schema({
    id            : {type:Number},
    typeid        : {type:Number, default: 0, min:0, max:3},  //有缺少值,和最小值最大值
    name          : {type:String, default:'', trim:true},     //有trim,可以去掉前后空格
    password      : {type:String, default:'', trim:true},
    nickname      : {type:String, default:'', trim:true},
    sex           : {type:Number, default:0, min:0, max:2},
    photo         : {type:String, default:'', trim:true},
    status        : {type:Number, default:1, min:0, max:3},
    registertime  : {type:Date,   default:Date.now},		//日期类型的缺省值
    lastlogintime : {type:Date,   default:Date.now},
    lastloginip   : {type:String, trim:true},
    idcard        : {type:String, default:'', index:true},  //这里可以定义对idcard的索引
    realnamecount : {type:Number, default:5},
    newaccountflag: {type:Boolean, default:true}  //boolean类型
});
 
accountSchema.index({ name:1}, { unique: true });
accountSchema.index({ id:1 }, { unique: true });
 
//下面用自增插件,实现id的自增功能
accountSchema.plugin(autoIncrement.plugin, {
    model: 'pf_account',
    field: 'id',
    startAt: 10000,
    incrementBy: 1
});
module.exports.accountSchema = mongoose.model("pf_account", accountSchema);

你可能感兴趣的:(node,数据库)