day39mongodb使用
mongodb简介:
文档:00mongodb介绍.note
链接:http://note.youdao.com/noteshare?id=9e17d6ff0b9738db8cffb15a125a1248&sub=51D27D685A784B218293B0858C86BF55
01 mongodb数据库 了解
了解 mongodb
+ 和 mysql 的区别
=> mysql 都是关系型数据库
-> 存储, 多表存储, 每一个表里面可以写一个信息, 和其他表关联
-> 多表联合查询
-> 多表之间可以存在联系, 可以使用 sql 语句让多张表联合在一起
=> mongodb 是非关系型数据库
-> 存储, 以集合(库 database)的形式存储
-> 集合里面都是以 json 文件的格式在存储
-> 多个表之间没有联系, 不能通过语句来产生联系(因为根本没有固定语句)
monogdb基本语法:
db.getMongo() 查看数据库连接地址 // db.version() 查看数据库版本信息 //db.dropDatabase() 删除数据库 --慎用 //db.createCollection("runoob") //创建集合 show dbs 查看数据库 db 查看当前数据库 use 数据库名 切换到某一个数据库 show collections 显示集合 db.集合名.操作 对集合进行某种操作 db.集合名.find() 查找 删除集合 db.runoob.drop() 查看所有集合 show collections 查看当前集合名称
插入单条 db.shuihu.insertOne({username:'宋江',password:'5555'}) 插入多条 db.shuihu.insertMany([{username:'徐宁',password:'5555',age:36},{username:'张清',password:'5555',age:40}]) 删 根据指定键值对条件 删除单条数据 db.colName.deleOne({key:val}) 例子 db.shuihu.deleteOne({"username":"徐宁"}) 删除所有数据 db.colName.deleteMany({}) 例子 精准删除多条数据 db.colName.deleteMany({key:val}) db.shuihu.deleteMany({username: {$in: ['卢俊义', '吴用']}}) 改 根据指定键值对条件 修改数据 db.shuihu.updateOne({username:'关羽'},{$set:{username:'赵云'}}) num 为正自增 负 自减 自增/自减单条数据 例子 db.shuihu.updateMany({age:19},{$inc:{age:1}}) 自增/自减单条数据 例子 db.shuihu.updateMany({age:20},{$inc:{age:-1}})
1 基本查询所有数据 db.shuihu.find() 2 格式化查询所有数据 更加美观 db.shuihu.find().pretty() 3 指定键值对条件查询 db.shuihu.find({key:val}) 4 指定条件查询(可以为{}表示所有数据) 并限制字段显示 //1 inclusion模式 指定返回的键,不返回其他键 db.shuihu.find({username:'张清'},{username:1,pass:1}) //2 db.exclusion 模式 指定不返回的键 返回其他键 db.shuihu.find({username:'张清'},{username:0,pass:0}) 5 分页查询 分页可以直接交给后端来做 db.colName.find({key:val}).limit(num).skip(start) //num 表示个数 //start 表示开始索引 默认0 例子 db.shuihu.find({}).limit(5).skip(2) 6 排序查询 db.shuihu.find({}).sort({age:1}) // 1 升序 -1 降序 // 例子 db.shuihu.find({}).sort({age:-1}) 7 区间查询 // 小于val1 大于val2 例子 db.shuihu.find({age:{$lt:88,$gt:33}}) // 小于等于val1 大于等于val2 例子 db.shuihu.find({age:{$lte:88,$gte:33}})
模糊查询 -- 实战中用于搜索 db.shuihu.find({username:/江/}) // 查看key中包含val的数据 db.shuihu.find({username:/^李/}) //查询key中包含val 以val开头的数据 2 或查询 db.shuihu.find({$or:[{username:'花荣'},{username:'及时雨宋江'}]}) 3 $in都要里面命中的都要查 db.shuihu.find({username: {$in: ['柴进', '花荣']}})
//宇宙唯一id:查询方式 db.shuihu.find({_id:(ObjectId("5ff51baf341b5d5b052695f8"))})
node 操作mongodb
我们先进入01的文件夹 然后npm init 一路回车 创建一个package.json 文件 方便记录我们的依赖 然后我们再安装mongoose 这是一个数据库的框架 帮我们处理了 数据库很多细节问题 mongoose优点! 可以为文档创建一个模式结构(Schema) 可以对模型中的对象进行验证 数据可以通过类型转换为对象模型 可以使用中间件来与业务逻辑挂钩 比Node原生的mongodb驱动更容易 此时我们再文件夹新建一个db.js db.js的意思是database 就是数据库的意思 所以叫做db 引入mongoose 模块 //引入mongoose 模块 const mongoose = require('mongoose') //2 连接mongodb并选择指定数据库 dbName mongoose.connect('mongodb://localhost:27017/gz2104') //3 连接成功 mongoose.connection.on('connected', ()=>{ console.log('我在监听成功状态') }) //4 连接断开 mongoose.connection.on('disconnected',()=>{ console.log('我在监听连接断开状态') }) //5 连接错误 mongoose.connection.on('error',()=>{ console.log('我在监听连接错误状态') }) //6 连接成功之后 将模块暴露出来 module.exports = { mongoose:mongoose } 现在我们需要先打开cmd mongo bin目录下第一次连接池 mongod --dbpath D:data 第二部分 不用mongo了 用我们的代码连接 node db.js 看看效果
这时候我们在建立user.js 我们利用mongoose 的Schema特性给 建立数据模型 什么是数据模型
const db = require('./db') const userSchema = new db.mongoose.Schema({ username:{type:String}, pass:{type:String}, age:{type:Number} }) module.exports = db.mongoose.model('users',userSchema)
07 插入数据准备
此时代码有一个小小的缺点 只能运行mongoose连接数据库 和user 这一个模型 实际开发中模型很多的 所 在新建一个sql.js 代表数据库整合js文件
const user = require('./user')