mongodb数据库
mongodb为非关系型数据库,支持JavaScript。在node.js中使用mongoose来操作mongodb数据库!
1.使用,下载mongodb
官网下载好后,需要配值环境变量。
系统变量 -----> path里面设置
==环境变量:==在本地电脑所有配置中都可以使用这个软件!
2.使用mongoose的步骤
连接数据库 —> 创建表规则 —>将表规则插入到表中 —> 返回的db表 后续通过这个db表来进行增删改查。
示例代码:
const mongoose = require('mongoose')
mongoose.set('strictQuery', true)
mongoose.connect('mongodb://localhost:27017/uuu').then(() => {
console.log("数据库连接成功!");
})
const mySchema = new mongoose.Schema({
name: String
})
const db = mongoose.model('demo', mySchema)
db.create({
name: "是你的哈斯"
})
3.一些表中细节:
__id 唯一标识符
__v 版本号 在建立表规则的时候,通过 versionKey:false来取消
4.类型限制
在mongoose中允许的类型有:
- String
- Number
- Date
- Buffer
- Boolean
- Array
mongoose会自动进行类型转换,例如String <---->Number
通用配置:
type:类型限制
default:默认值
required:true 表示这个值必须要填写
validate:{ 自定义验证
validator(value){
//自定义验证规则
},
message:如果自定义函数验证返回false的话,返回这个报错信息!
}
String常用配置:
lowercase:true
uppercase:true
trim:true
enum:[选择组合中的一个值]
minlength
maxlength
Number常用配置
min:最小数字
max:最大数字
数组
[{type:String,minlength:2}]
[Number]表示数组所有内容都得是Number类型
[Boolean]
[Buffer]
5.增删改查操作
增
添加功能
db.create(数据) 获取返回值 要么就.then 要么使用async await
返回值 => 写入的内容
db.create({}) 写入单个
db.create({},{},{},{}) 写入多个
db.create([{},{},{},{}]) 写入多个
查
查功能
find( conditions, [projection], [options] );
conditions 查询条件 {}
projection 返回内容选项 {}
options 查询内容配置选项 {}
find() 查找所有
findOne() 查找一个
findById() 查找ObjectId值
conditions
find({}) 查找表中所有数据
find({name:属性值}) 基础查找 => 查找对应得属性名:属性值
{} 基础条件块,eg: {name:"afei"}
$or $nor 或者 或者取反,eg: {$or:[{name:"afei"},{age:"20"}]}
属性名和属性值
$or或者
let reuslt = await db.find({$or:[{name:"夏职"},{age:17}]})
$nor取反 不需要$nor中配置选项
let reuslt = await db.find({$nor:[{name:"夏职"},{name:"luyao"},{name:"dage"}]})
$gt $gte $lt $lte $ne 大于 大于等于 小于 小于等于 不等于,eg: {age:{$lt:20}}
let reuslt = await db.find({age:{$lt:20}})
$in $nin 或 || 取反,eg: {name:{$in:["afei","zhuque"]}}
$in或 找属性值
let reuslt = await db.find({name:{$in:["夏职","luyao"]}})
$exists 存在某属性,eg: {age:{$exists:true}}
$size 数组长度匹配,eg: {arr:{$size:2}}
$all 数组中是否存在指定的所有项,eg: {arr:{$all:[123,456]}}
$where 可以使用JavaScript代码或函数,eg: {$where:"this.age===18"}
projection
显示的内容 属性名:1 只显示改内容 id的会显示
属性名:0 隐藏内容
options
skip: n 跳过前n项数据
limit: n 返回n项数据
sort:{age:-1} 排序 正数从小到大 负数从大道小
返回值
find() 查找所有
=> 返回值
查到 数组结构
未查到 空数组
findOne() 查找一个
=> 返回值
查到 一个对象结构数据
未查到 null
findById() 查找ObjectId值
=> 返回值
查到 一个对象结构数据
未查到 null
删
删除
deleteOne(查询条件) 单个 => 返回值 告诉你删除了几个
deleteMany(查询条件) 删除多个 => 返回值 告诉你删除了几个
查询条件 就是学习查找功能里面的api方法
改
update updateOne updateMany findByIdAndUpdate
基础修改
// let result = await db.updateOne({pass:"我爱美女"},{name:"严周恩"})
修改对象
// let result = await db.updateOne({name:"da"},{"arr.qqq.www":"严周恩"})
数字自增
// let result = await db.updateOne({name:"严周恩"},{$inc:{age:20}})
移除属性
// let result = await db.updateOne({name:"严周恩"}, {$unset:{pass:0}} )
// let result = await db.updateOne({name:"qwe"}, {$pull:{arr:1}} )
往数组中添加多个数据
// let result = await db.updateOne({name:"qwe"}, {$push:{arr: {$each:["我","爱","吃","大","米"]}}} )
6.中间件
上官网查看,不多赘述了。
7.多个表之间链接
const mongoose = require("mongoose");
// 没有.then的方法 链接数据库地址
let db = mongoose.createConnection("mongodb://localhost:27017/luyao")
// 判断链接
db.on("open",()=>{
console.log("数据库链接成功");
})
db.on("error",()=>{
console.log("数据库链接失败");
})
// 写表规则
let Mny = new mongoose.Schema({
name:String,
pass:String,
})
let newMny = db.model("qwe",Mny)
newMny.create({
name:"123",
pass:"123"
}).then(()=>{
console.log("newMny成");
})
// 链接数据库地址
let bd1 = mongoose.createConnection("mongodb://localhost:27017/web")
// 判断链接
bd1.on("open",()=>{
console.log("bd1数据库链接成功");
})
bd1.on("error",()=>{
console.log("bd1数据库链接失败");
})
// 写表规则
let Mny1 = new mongoose.Schema({
name:String,
pass:String,
})
let newMny1 = bd1.model("xia",Mny)
newMny1.create({
name:"123",
pass:"123"
}).then(()=>{
console.log("newMny1");
})
8.表关联
let db = mongoose.model("dada",new Schema({
name : String,
pass : String,
author:[{
type: Schema.Types.ObjectId, // 规则ObjectId
ref:db1,
}]
}))
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost:27017/data').then(() => {
console.log("链接成功");
})
const { Schema } = mongoose
const mySchema1 = new Schema({
name: String,
age: Number
})
const db2 = mongoose.model('user', mySchema1)
const mySchema = new Schema({
intests: String,
author: [{
type: Schema.Types.ObjectId,
ref: db2
}]
})
const db1 = mongoose.model('biao', mySchema)
db1.create({
intests: '钓鱼',
author: "63ad983eb6d775f31752d037"
})
db1.findOne({ intests: "钓鱼" }).populate('author').then((data) => {
console.log(data);
})
关键一步取关联数据为:populate(‘author’)