说明
- 其实Node中有MongoDB的模块,但是一般不用,使用太复杂
- 一般使用mongoose
mongoose使用
mongoose介绍
mongoose为我们提供了几个新的对象
- Schema(模式对象)
- Schema对象定义约束了数据库中的文档结构
- Model
- Model对象作为集合中的所有文档的表示,相当于MongoDB数据库中的集合collection
- Document
- Document表示集合中的具体文档,相当于集合中的一个具体的文档
下载安装
npm i mongoose --save
在项目中使用
// 引入mongoose
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
// 连接MongoDB数据库,如果端口号是默认的(27017),可以不用写
mongoose.connect('mongodb://数据库的IP地址:端口号/数据库名')
// 监听数据库的连接状态(不是必须的)
// 监听连接
mongoose.connection.once("open",function(){
conosle.log("连接了")
})
// 监听断开
mongoose.connection.once("colse",function(){
conosle.log("断开了")
})
// 断开数据库(一般情况下,不需要调用,因为一般只需要调用一次)
mongoose.disconnect()
// 创建Schema对象
const ipartmentSchema = new Schema({
name: String,
age: Number,
from: {
type: String,
default: "《爱情公寓》"
},
like: String
})
// 创建model对象(相当于创建collection)
const IpartmentModel = mongoose.model('ipartment',ipartmentSchema)
// 创建文档
// 第一种
IpartmentModel.create({
name: "唐悠悠",
age: 20,
from: "《爱情公寓2》",
like: "关谷神奇"
},function(err) {
if(!err) {
console.log("插入数据成功")
}
})
// 第二种
var ipt = new IpartmentModel({
name: "关谷神奇",
age: 20,
from: "《爱情公寓》",
like: "唐悠悠"
})
ipt.save(function(err){
if(!err) {
console.log("插入数据成功")
}
})
API
Model上的API
1. Model.create(doc,[callback])
参数:
doc: 可以是个对象,也可以是是一个对象数组
callback:操作完成的回调,可以不写
2. Model.find(conditions,[projection],[options],[callback]) // 返回数组
3. Model.findById(id,[projection],[options],[callback]) // 返回对象
4. Model.findOne(conditions,[projection],[options],[callback]) // 返回对象
参数:
conditions:查询的条件
和原生的基本一样使用。
projection:投影
可以和原生一样传递对象,这里也可以传一个字符串,用空格分开,如果不要但会的数据,可以在他名称前面加一个“-”。("name age -_id":这个的意思是返回的数据中显示name,age字段,不显示_id)
options:查询选项(skip,limit)
callback:回调函数,查询结果会通过回调函数返回,回调函数必须传,不传不会查询
5. Model.update(conditions,doc,[options],[callback])
6. Model.updateMany(conditions,doc,[options],[callback])
7. Model.updateOne(conditions,doc,[options],[callback])
参数:
conditions:查询的条件
和原生的基本一样使用。
doc:修改后的对象
options:配置参数(muilt)
callback:回调函数,更新结果会通过回调函数返回
8. Model.remove(conditions,[callback])
9. Model.deleteMany(conditions,[callback])
10. Model.deleteOne(conditions,[callback])
参数:
conditions:查询的条件
和原生的基本一样使用。
callback:回调函数,删除结果会通过回调函数返回
11. Model.count(conditions,[callback])
document上的API
// ipt举例,ipt是Model的实例,doucment的API都是在实例上使用
1. ipt.save([options],[fn])
还可以使用在修改上,在使用查询语句查询到文档后,直接修改值,然后再调用一下save方法,下面是例子
IpartmentModel.findOne({},function(err,doc){
if(!err){
doc.age = 18;
doc.save()
}
})
2. ipt.remove([fn])
查询到以后,直接调用删除
3. ipt.get(name)
获取文档中指定属性值,其实可以直接使用ipt.name。
4. ipt.set(name)
设置文档中指定的属性值,其实也可以直接是ipt.name = '张三',同样还需要调用save