moguibeijing 2019-06-29
mongoose网站:https://mongoosejs.com/
Mongoose就是一个让我们可以通过Node来操作MongoDB的一个模块。
Mongoose本质是一个对象文档模型(ODM)库,
他对Node原生的MongoDB模块进行了一部优化封装,并且提供了更多的功能。
cnpm install mongoose --save
var mongoose =require("mongoose");
var db =mongoose.connect("mongodb://user:pass@localhost:port/database");
var mongoose =require("mongoose"); var db =mongoose.connect("mongodb://localhost/m_data"); db.connection.on("error",function (error) { console.log("数据库连接失败:" + error); }); db.connection.on("open",function () { console.log("数据库连接成功!"); }); db.connection.once('close', ()=>{ console.log('连接已经断开成功!') })
在MongoDB中,多个Document可以组成Collection(以下简称集合),多个集合又可以组成数据库。我们想要操作MongoDB数据,那就得先要具备上面所说的包含数据的“文档”,文档又是什么意思呢,请看如下介绍。
mongoose中任何任何事物都是从Schema开始的。每一个Schema对应MongoDB中的一个集合(collection)。Schema中定义了集合中文档(document)的样式。
//新建Schema 定义规则/字段的规则 let Schema= mongoose.Schema; //定义personSchema的字段(规则)需要new一下 有点像构造函数的样子 let personSchema= new Schema({ name: String, sex: String, age: Number });
基本属性类型有:
Model—— 由Schema构造生成的模型,根据Schema定义的数据类型规则,可操作具体的符合改规则的数据。
let personModel= mongoose.model('person', personSchema);
person:数据库中的集合名称,当我们对其添加数据时如果person已经存在,则会保存到其目录下,如果未存在,则会创建person集合,然后在保存数据。
//4. 插入文档 personModel.create({ name: '张宁乐', sex: '男', age: 18 }, (err)=>{ if(!err){ console.log('插入成功!') }else{ throw err; } });
mongoose查找数据的一些方法:
https://mongoosejs.com/docs/a...
personModel.create([ {name:'张逗逗',age: 2,sex: '男'}, {name:'牛嘻嘻',age: 2,sex: '女'} ], (err)=>{ if(!err){ console.log('插入成功!') }else{ throw err; } })
personModel.find({name: '张宁乐'}, (err, data)=>{ if(!err){ console.log(data) }else{ throw err; } })
personModel.find({}, (err, data)=>{ if(!err){ console.log(data) }else{ throw err; } })
也可以选择查找数据的条件(0隐藏 1显示 id默认显示) 和MongoDB在命令行中的使用方法一样
//查询时只显示name personModel.find({}, {name: 1, _id: 0}, (err,data)=>{ if(!err){ console.log(data) }else{ throw err; } })
在find()
中 skip
(查询开始的位置)和limit
(增加的条数)也可以使用
personModel.find({}, {name: 1, _id: 0, age: 1}, {skip: 0, limit: 2}, (err, data)=>{ //只显示name 和 age 从第1开始 每次查询2条 if(!err){ console.log(data) }else{ throw err; } })
MongoDB的find()、findOne() 等命令在 mongoose里都可以使用
具体可参考 :https://mongoosejs.com/docs/a...
参考: https://mongoosejs.com/docs/a...
personModel.update({name: '张宁乐'}, {$set: {age: 20}}, (err, data)=>{ if(!err){ console.log('修改成功!') console.log(data) }else{ throw err; } })
personModel.remove({name:'牛嘻嘻'}, (err)=>{ if(!err){ console.log('删除成功!') }else{ throw err; } })
personModel.count({}, (err,count)=>{ if(!err){ console.log('查询条数成功! 一共:' + count + '条'); }else{ throw err; } })
Entity—— 由Model创建的实体,使用save方法保存数据,Model和Entity的操作都能影响数据库的操作,但Model比Entity更具操作性。
使用Model创建Entity,如下示例:
let mongoose= require('mongoose'); let db= mongoose.connection('mongodb://localhost/m_data'); db.on('open', ()=>{ console.log('连接成功!') }) let Schema= mongoose.Schema; let personSchema= new Schema({ name: String, sex: String, age: Number }); let personModel= mongoose.model('person', personSchema); let personEntity = new personModel({ name: '许巍', sex: '男', age: 38 }) personEntity.save((err, person)=>{ if(!err){ console.log('保存成功!') console.log(person); }else{ console.log('保存失败!') } })