什么是mongoose?
官方解释:一种专门为node.js量身打造的优雅的mongodb对象!
简单来说,mongoose是为node封装的一个mongodb库,相比较mongodbre,写法更加简单,很多函数都封装好了,可以直接使用。
node中如何使用mongoose?
在这里在node中新建一个项目(test)来具体说明。在使用mongoose之前,我们先来用express搭建一个非常简单的服务器。
- 新建test文件夹,打开终端,输入
npm init
进行初始化。 - 安装两个框架:
express:npm install express --save
mongoose:npm install mongoose --save
- 新建app.js后的项目目录为:
- 新建服务器的代码:
const express = require("express");
const app = express();
app.get("/",(req,res)=>{
res.end("hello!")
})
app.listen("5000",()=>{
console.log("服务器已经启动!")
})
操作mongoose(以增加为例,其他的命令在下面讲)
- 引入:
import mongoose from "mongoose";
- 将连接mongodb(前提是mongodb已经启动起来): 这个链接的是mongodb数据库中的hello数据库
mongoose.connect("mongodb://localhost/hello",{useNewUrlParser:true});
- 监听连接结果:
//监听连接失败:
mongoose.connection.on("err",()=>{
console.log("数据库连接失败!");
});
//监听连接成功:
mongoose.connection.on("open",()=>{
console.log("数据库连接成功!");
});
- 创建personSchema模式对象 :
const personSchema = mongoose.Schema({
//人名
p_name:{type:String,required:true},
//性别
p_sex:{type:String,required:true},
//年龄
p_age:{type:Number,required:true},
//特长
p_skill:{type:String,required:true}
});
- 创建以personSchema模式对象为基础的people集合:
const People = mongoose.model("peoples",personSchema);
- 创建person文档:
const person = new People({
//人名
p_name : "华晨宇",
//性别
p_sex : "男",
//年龄
p_age : 30,
//特长
p_skill: "唱歌 卖萌"
});
- 保存: 这时数据库里面就会有刚才插入的数据了。
person.save((err,result)=>{
if(err){
throw err;
}
console.log("数据插入成功!");
})
此时在浏览器敲入地址:http://localhost:5000/
;控制台显示:
打开 mongodb 的可视化工具,可看到:
表明数据插入成功!
mongoose的命令:
对集合
//创建了一个以personSchema为基础的peoples集合
const People = mongoose.model("peoples",personSchema);
对文档
- 增:
const person = new Person({ "name" : "华晨宇" })
//1.save()
person.save((err,result)=>{})
person.create({ "name" : "华晨宇" });
person.create([{ "name" : "华晨宇"}, { "name" : "花花"}]);
- 删
//接受两个参数,分别是匹配条件,回调函数
//删除匹配到的第一个
People.deleteOne({"name":"华晨宇"},(err, result)=>{
if(err){
throw err;
}
})
//删除匹配到的全部条目
People.deleteMany({"name":"华晨宇"},(err, result)=>{
if(err){
throw err;
}
})
- 改:
//改掉匹配到的第一个
People.update(query, { name: 'suibian' }, options, callback);
People.updateMany(query, { name: 'suibian' }, options, callback);
//和update差不多,但是有些选项不支持,比如multi
People.updateMany(query, { name: 'suibian' }, options, callback);
- 查:
//find
//只有一个条件,第二个参数可以传递返回的值
People.find({"name":"华晨宇"},“name”,(err, persons)=>{})
//多个条件同时满足
People.find({name : "华晨宇",age: { $gt: 18 }},(err, persons)=>{})
//选择的条件也可以是一个正则表达式
People.find({name : "/晨/i",age: { $gte: 18 }},(err, persons)=>{})
People.findOne({ name : '华晨宇' }, (err, person)=> {});
//以下都是通过id寻找的
People.findById(id, 'name', (err, person)=> {});
People.findById(id, 'name', { lean: true }, (err, person) =>{});
People.findOneAndDelete(conditions, [options,] callback)
People.findOneAndRemove(conditions, [options,] callback)
People.findOneAndUpdate(condition, { name: '花花' }, [options,] callback)