数据库mongodb
MongoDB是基于分布式文件存储的数据库。
数据库命名:
通过标识符,一般是utf-8字符串,不能为空,不能用local/admin/config这三个。
文档
文档是一个键值(key-value)对MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
集合
集合就是 MongoDB 文档组,类似于 RDBMS (关系数据库管理系统:Relational Database Management System)中的表格。
集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。集合的命名不能是空字符串,也不能出现-,0等,不能以system,$开头
ObjectId
ObjectId 类似唯一主键,可以很快的去生成和排序.
MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象。
MongoDB安装
一、下载地址https://www.mongodb.com/download-center/community
二、命令行下运行 MongoDB 服务器为了从命令提示符下运行MongoDB服务器,你必须从MongoDB目录的bin目录中执行mongod.exe文件。
终端中进入 C:\Program Files\MongoDB\Server\4.0\bin 目录。
然后终端中输入mongod就可以启动MongoDB服务器。
如果启动不成功,可能是没有db的路径,所以指令输入
mongod --dbkpath 创建db文件的路径E:/db
当你看到 waiting for connections on port 27017 的时候就是数据库启动成功了。
三、控制台中使用mongo(终端中进入mongo的安装目录的bin下)
命令行操作 Mongodb
MongoDB的可视化工具:Robo3T 或者noSql booster
MongoDB 命令
db.集合名(文件名).方法名
插入文档 insert()
db.post.insert()//在post中插入文档
db.psot.insertOne({})//在post中插入一个文档
db.post.insertMany({},{})//在post中插入多个
查询文档 find()
db.post.find({})//不传参数是查找全部,传入键值是查询包含该键值的文档
db.post.findOne({})//只查找一条
更新文档 update()
db.posts.update({title: "aaa"}, {$set: {age: ‘changeName‘}});
第一条是查询到符合条件的文档,第二条是更新的内容 $set后面是修改的内容
db.post.updata({name: ‘Lisi‘}, {$inc: {age: 50}});
$inc 是让其自己正加上响应的数字
删除文档delete()
db.post.delete({})//不传参数是删除全部,传入键值是删除包含该键值的文档
db.post.deleteOne({})//传入键值,只删除一个
条件查询
范围查询
关键字 |
含义 |
= |
相等 |
$gt |
>大于号 |
$lt |
< 小于号 |
$lte |
=< 小于等于号 |
$gte |
>= 大于等于号 |
例:
查询age = 22的记录
db.userInfo.find({"age": 22}); 相当于: select * from userInfo where age = 22;
查询age > 22的记录
db.userInfo.find({age: {$gt: 22}}); 相当于:select * from userInfo where age >22;
查询age < 22的记录
db.userInfo.find({age: {$lt: 22}}); 相当于:select * from userInfo where age <22;
查询age >= 25的记录
db.userInfo.find({age: {$gte: 25}}); 相当于:select * from userInfo where age >= 25;
查询age <= 25的记录
db.userInfo.find({age: {$lte: 25}});
查询age >= 23 并且 age <= 26
db.userInfo.find({age: {$gte: 23, $lte: 26}});
模糊查询
查询name中包含mongo的数据
db.userInfo.find({name: /mongo/}); //相当于%% select * from userInfo where name like ‘%mongo%’;
并且条件: 查找时一个对象中传入两个键值,中间用逗号隔开,
db.userInfo.find({name: ‘zhangsan‘, age: 22【】});相当于:select * from userInfo where name = ‘zhangsan‘ and age = ’22‘;
或者条件 {$or :[{},{}]}满足一个条件就能查出来
db.userInfo.find({$or: [{age: 22}, {age: 25}]});相当于:select * from userInfo where age = 22 or age = 25;
筛选数据
查询指定列name、age数据,在需要查询的对象之后再加入一个对象
{ name:1} 表示显示name这一项。
db.user.find({}, {name: 1, age: 1});
//相当于:select name, age from userInfo;
查询指定列name、age数据, age > 25
db.userInfo.find({age: {$gt: 25}}, {name: 1, age: 1});
相当于:select name, age from userInfo where age >25;
limit与skip方法
查询前几条数据 limit()
例:查询前5条数据
db.userInfo.find().limit(5); 相当于:select top 5 * from userInfo;
查询几条之后的数据 skip()
例: 查询10条之后的数据
db.userInfo.find().skip(10); 相当于:select * from userInfo where id not in ( select top 10 * from userInfo );
限制数据量/几条数据
例:db.userInfo.find().limit(10).skip(5);
排序sort()
1代表升序,-1代表降序
例: 升序:db.userInfo.find().sort({age: 1});
降序:db.userInfo.find().sort({age: -1});
Mongoose的使用
安装mongoose npm i mongoose
引入模块,连接数据库
创建models文件夹,新建index.js
let mongoose = require(‘mongoose‘); // 链接数据库 mongoose.connect(‘mongodb://localhost:27017/zhili‘).then(data=>{ console.log("链接成功") }).catch(err=>{ console.log(err) });
地址的冒号后面是启动数据库之后的那个返回的数据27017。在后面的/zhili是选择想要链接的数据库
schema(提要,刚要,表)
// 新建表(集合) let Schema = mongoose.Schema // 新建文章表,命名规则是 let ArticleSchema = new Schema({ title:String,//文章标题 title 是字符串类型 body:String,//文章内容 author:String, comments:[{body:String,date:Date}],//评论 hidden:{ type:Boolean,// 文章是否能被普通用户看见 default:false }, favs:{ type:Number,//默认 点赞次数0 default:0 } } ,{ timestamps:true//增加两个字段 记录 创建时间 修改时间 })
根据表明和结构得到数据库模型
// 根据表名 和 表结构 得到数据库模型 let Article = mongoose.model(‘Article‘,ArticleSchema) // 根据数据库模型 操作 数据 增删改查
插入数据
// 插入数据 let a1 = new Article({ title:"aaa", body:"HDSDFJKDF", author:"DNASJFN", comments:[{body:"FSLKDJF",date:new Date()}], favs:888 }) a1.save().then(res=>{ console.log("插入成功"+res) }).catch(err=>{ console.log(err) })
删除数据
//删除 //根据id删除 Article.deleteOne({_id:"5f0eaf26dea3bc22d8e77843"}).then(res=>{ console.log(res) }) //根据id查询 并且删除 Article.findByIdAndDelete(‘5f0eaf890248d70ac001ccb8‘).then(res=>{ console.log(res) })
修改数据
// 修改 Article.updateOne({_id:"5f0eaf8c2367ce1a206332e3"},{body:"今天周三"}).then(res=>{ console.log(res) }) Article.updateOne({_id:"5f0eaf8c2367ce1a206332e3"},{$inc:{favs:1}}).then(res=>{ console.log(res) })
查询数据。findById()
// 查 Article.findById(‘5f0eaf8c2367ce1a206332e3‘).then(res=>{ console.log(res) }) Article.findOne({title:"11",body:"22"}).then(res=>{ console.log(res) })
在终端中返回值
Article.find().then(res=>{
console.log(res)
})
原文:https://www.cnblogs.com/52580587zl/p/13308160.html