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);
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);