Mongoose基础入门
Mongoose介绍
Mongoose是MongoDB的一个对象模型工具,底层使用Mongodb的驱动,提供一套操作MongoDB数据库的接口。
- momgoose中文文档:http://www.mongoosejs.net
- mongodb文档:https://docs.mongodb.com/manual
安装
$ npm install mongoose
使用mongoose连接数据库
连接数据库MongoDB,会使用到mongoose.connect()方法。
- mongoose.connect(url, options)
mongoose.connect('mongodb://username:password@host:port/database?options...');
- username:数据库的账号
- password:数据库的密码
- host: 数据库主机的地址 (一般为127.0.0.1)
- post:端口 (27017)
- database:连接的数据库
实例:
const mongoose = require("mongoose");
//由于数据库没设置账号密码,这里省略账号密码 MongoDB的端口号为27017
const url = 'mongodb://127.0.0.1:27017/admin';
//mongoose.connect 方法来链接 返回的是promise对象
mongoose
//connect参数2是个对象 为可选参数 当出现useNewUrlParser警告时 再来设置
.connect(url, { useNewUrlParser: true })
.then(() => {
console.log("数据库链接成功");
})
.catch(err => {
console.log("数据库链接失败", err.message);
});
-
connect()
函数接受回调函数,或返回一个 [promise]
mongoose.connect(uri, options, function(error) {
// Check error in initial connection. There is no 2nd param to the callback.
});
// Or using promises
mongoose.connect(uri, options).then(
() => { /** ready to use. The `mongoose.connect()` promise resolves to undefined. */ },
err => { /** handle initial connection error */ }
);
数据库增删查改
Mongoose 的一切始于 Schema。每个 schema 都会映射到一个 MongoDB collection ,并定义这个collection里的文档的构成。
- 实例Schema
var SingerSchema =mongoose.Schema({
name : String,
age : Number
})
document 里每个属性的类型都会被转换为 在 SingerSchema
里定义对应的 SchemaType。
允许使用的 SchemaTypes 有:
- String
- Number
- Date
- Buffer
- Boolean
- Mixed
- ObjectId
- Array
-
创建一个 model
mongoose.model()
var SingerSchema =mongoose.Schema({
name : String,
age : Number
})
var Singer=mongoose.model("Singer",SingerSchema)
第一个参数是跟 model 对应的集合( collection )名字的 单数 形式。 Mongoose 会自动找到名称是 model 名字 复数 形式的 collection
。 对于上例,对的是数据库的集合的singers。
- 如果想要实现对单数的
集合
操作,可以修改为
var SingerSchema =mongoose.Schema({
name : String,
age : Number
})
//第三个参数要与集合名一致大小写
var Singer=mongoose.model("Singer",SingerSchema,singer)
-
实现对数据的查询
使用的model
的 find静态方法进行数据的查询
Singer.find({},function(err,doc){
if(err){
console.log("抛出"+err)
}
console.log(doc)
})
另外也可以使用findById, findOne, 和 where 这些静态方法,进行查询。
-
实现对数据的增加
使用的model
的 create静态方法进行数据的查询
Singer.create({name:"张三",age:"12"},function(err,doc){
if(err){
console.log("抛出"+err)
}
console.log("成功")
})
-
实现对数据的删除
使用的model
的 remove静态方法进行数据的查询
Singer.remove({name:"张三",age:"12"},function(err,doc){
if(err){
console.log("抛出"+err)
}
console.log("成功")
})
-
实现对数据的更新
使用的model
的 update静态方法进行数据的查询
Singer.update({name:"张总"},{age:"333355553"},{ multi: true },function(err,doc){
if(err){
console.log("抛出"+err)
}
console.log("成功")
})
有效选项:
-
safe
(布尔值)安全模式(默认为在架构(true)中设置的值) -
upsert
(布尔值)是否创建不匹配的文档(默认false) -
multi
(布尔值)是否应更新多个文档(默认false) -
runValidators
:如果为true,则对此命令运行更新验证程序。更新验证器根据模型的架构验证更新操作。 -
setDefaultsOnInsert
:如果upsert
为true,则在创建新文档时,猫鼬将应用模型模式中指定的默认值。此选项仅在MongoDB> = 2.4上有效,因为它依赖于MongoDB的$setOnInsert
operator。 -
strict
(布尔值)会覆盖strict
此更新的选项 -
overwrite
(布尔值)禁用仅更新模式,从而允许您覆盖文档(false)update
在发送所有值之前,所有值都将强制转换为其相应的SchemaType。该callback
函数接收(err, rawResponse)
。 -
err
是错误(如果发生) -
rawResponse
是Mongo的完整回应