连接数据库
nodejs连接数据库需要借助第三方库 mongoose
npm install mongoose
yarn add mongoose
使用mongoose提供对的connent方法即可连接数据库
// mongodb协议 地址 数据库名(没有的话会自动创建)
mongoose.connect("mongodb://localhost/playground")
.then(() => console.log("数据库连接成功"))
.catch(e => console.log("数据库连接失败",e))
mongodb查询条件
$or 或关系
$nor 或关系取反
$gt 大于
$gte 大于等于
$lt 小于
$lte 小于等于
$ne 不等于
$in 在多个值范围内
$nin 不在多个值范围内
$all 匹配数组中多个值
$regex 正则,用于模糊查询
$size 匹配数组大小
$maxDistance 范围查询,距离(基于LBS)
$mod 取模运算
$near 邻域查询,查询附近的位置(基于LBS)
$exists 字段是否存在
$elemMatch 匹配内数组内的元素
$within 范围查询(基于LBS)
$box 范围查询,矩形范围(基于LBS)
$center 范围醒询,圆形范围(基于LBS)
$centerSphere 范围查询,球形范围(基于LBS)
$slice 查询字段集合中的元素(比如从第几个之后,第N到第M个元素)
mongodb增删改查
1、创建集合
创建集合分为两步,一是对对集合设定规则,二是创建集合,创建mongoose.Schema构造函数的实例即可创建集合
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/playground").then(() => {
console.log("数据库连接成功")
}).catch(e => {
console.log("数据库连接失败",e)
})
// 设置规则
const courseSchema = new mongoose.Schema({
// 文档中可以添加的字段
name: String,
author: String,
isPubliched: Boolean
})
// 注:只有给数据库添加了数据,才能看到该数据库
// 创建集合,返回的是构造函数 (集合名字 配置的规则) 在数据库中集合名字是course
const Course = mongoose.model("Course",courseSchema); // courses
2、创建文档
有两种方法
- 实例化集合的构造函数时传入数据,并保存到数据库
分为两步- 创建集合的实例
- 使用集合实例下的save()方法将数据保存在数据库中
const course = new Course({
name:"nodejs basic",
author: "hmteacher",
isPubliched: true
})
course.save();
- 使用集合构造函数的静态方法create()
参数1:要添加的文档
参数2:回调函数:参数1:错误信息;参数2:添加的数据
Fly.create({
name:"dog",
action:"eat"
},(err,doc) => {
if(err){
console.log("添加失败",err);
return;
}
console.log(doc);
})
也可以使用Promise的方式
Fly.create({
name:"dog",
action:"eat"
}).then(doc => {
console.log(doc)
}).catch(err => {
console.log(err)
})
3、mongodb数据库导入数据
mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件
如果是数组的样式
mongoimport -d 数据库名称 -c 集合名称 --jsonArray 要导入的数据文件
4、查询文档
1. 查询语句
- find() 根据条件查询文档(条件为空则查找所有文档),返回Promise对象
查询所有数据
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/playground").then(() => {
console.log("连接成功")
}).catch(e => {
console.log("连接失败",e)
})
// 创建集合规则
const userSchema = new mongoose.Schema({
name:String,
age:Number,
email:String,
password:String,
hobbies:[String]
})
// 分配规则
const users = mongoose.model("users",userSchema);
users.find().then(res => {
console.log(res);
})
// 返回的是一个数组
users.find({_id:"6242fdea62e4817b23769ccd"}).then(res =>{
console.log(res)
})
- findOne() 根据条件查询文档,只返回一条数据,条件若为空则默认返回集合中的第一条文档
users.findOne({name:"张三"}).then(res => {
console.log(res)
})
2. 查询条件匹配
- 匹配大于($gt)小于($lt)
// 大于20小于23
users.find({age:{$gt:20,$lt:23}}).then(res => {
console.log(res);
})
- 匹配包含($in)
users.find({hobbies:{$in:["写PHP"]}}).then(res => {
console.log(res)
})
- 选择要查询的字段(select("字段名多个字段名用空格隔开 "))
users.find().select("name email").then(res => {
console.log(res)
})
// 查询到的结果默认是带有_id的,若不想要_id,则需要在_id前加个负号(-)如下:
users.find().select("name email -_id").then(res => {
console.log(res)
})
- 将查询到的数据进行排序(sort(“字段名”)),默认是升序排列,降序需要在字段名前加负号(-)
// 升序
users.find().sort("age").then(res => {
console.log(res)
})
// 降序
users.find().sort("-age").then(res => {
console.log(res)
})
- 分页(skip(n)跳过n条数据,limit(n)限制查询数量)
users.find().skip(2).limit(2).then(res => {
console.log(res)
})
5 、 删除文档
- findOneAndDelete({}) 删除单个文档,条件若是为空,默认删除第一条,删除成功返回被删除的数据,删除失败返回null
users.findOneAndDelete({_id:"6242fdea62e4817b23769cd1"}).then(res => {
console.log(res);
})
- deleteMany({})删除多个,条件为空,默认删除全部文档。删除成功后返回一个对象{ acknowledged: true, deletedCount: 4 }"acknowledged"表示删除成功否,"deletedCount"表示删除的条数
6、更新文档
- updateOne({查询条件},{要修改的值}) 修改单条数据,返回一个对象
{
acknowledged: true,
modifiedCount: 1,
upsertedId: null,
upsertedCount: 0,
matchedCount: 1
}
users.updateOne({name:"张三"},{name:"狗蛋"}).then(res => {
console.log(res)
})
- updateMany({查询条件},{要修改的值}) 修改多条,返回一个对象
users.updateMany({},{age:60}).then(res => {
console.log(res)
})