MongoDB数据库增删改查基本使用
MongoDB数据库增删改查基本使用
文章目录
- MongoDB数据库增删改查基本使用
- 1.CRUD介绍
- 2.MongoDB数据库常用命令
- 3.MongoDB数据库显示命令
- 3.1.查询当前有多少个数据库
- 3.2.显示当前所在的数据库
- 3.3.切换数据库
- 3.4.显示帮助信息
- 3.5.打印当前数据库用户列表
- 3.6.显示当前所在的数据库表信息
- 3.7.删除一个表(集合)
- 3.8.命令行执行mongo命令
- 4.插入数据
- 4.1.插入一条数据
- 4.2.批量插入多条数据
- 4.3.插入嵌套数据
- 5.查询数据
- 5.1.查询book_date表中status包含N的数据
- 5.2.查询nest_date表中size嵌套uom是cm并且qty小于50的数据
- 5.3.查询nest_date表中size嵌套uom是cm并且qty等于75的数据
- 5.4.查询book_date表status等于T或者price小于50的数据
- 5.5.正则查询表中数据
- 5.6.查询表中第一条数据
- 6.更新数据
- 6.1.更新一条数据
- 6.2.匹配多个条件更新
- 6.3.更新多条数据
- 6.4.使用update更新一条数据
- 7.删除数据
- 7.1.删除一条数据
- 7.2.删除多条数据
1.CRUD介绍
CRUD操作是create(创建)、read(读取)、update(更新)和delete(删除)
MongoDB不支持常规的SQL的命令,但是自身有丰富的查询语言
MongoDB在插入一条数据后,会自动增加一个_id自动,作为主键,如果插入的文档省略了id字段,则会自动生产一个Object_id字段
MongoDB默认有4个数据库:
test:登陆时默认存在的库,不切换其他库时默认存在的库
admin:系统预留库,MongoDB系统管理库
local:本地预留库,存储关键日志
config:MongoDB配置信息库
mongo默认登陆的时候是在test库下
mongo不需要提前创建库和表,直接use切换就是创建库,直接插入数据就会创建表
使用use切换到的库,如果没有任何数据,实际上并不会真正创建,是个虚的库,所以show dbs并不会显现,只有在插入数据后,数据库才会真正创建
mongodb插入数字时,不需要使用双引号
2.MongoDB数据库常用命令
命令 | 含义 |
---|---|
show databases | 查看数据库 |
db | 显示当前所在数据库 |
use config | 切换数据库 |
help | 显示帮助信息 |
db.help() | 显示数据库帮助信息 |
show users | 查看所有用户 |
show tables | 查看所有表 |
db.表名.drop() | 删除一个表 |
db.表名.insert() | 插入一条数据 |
db.表名.insertMany() | 插入多条数据 |
db.表名.find() | 查询数据 |
db.表名.updateOne() | 更新一条数据 |
db.表名.updateMany() | 更新多条数据 |
db.表名.update() | 更新一条数据 |
db.表名.deleteOne() | 删除一条数据 |
db.表名.deleteMany() | 删除多条数据 |
3.MongoDB数据库显示命令
3.1.查询当前有多少个数据库
> show databases
admin 0.000GB
config 0.000GB
local 0.000GB> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
3.2.显示当前所在的数据库
> db
test
3.3.切换数据库
> use config
switched to db config> db
config
3.4.显示帮助信息
1.显示当前库下可以执行的命令
> help2.显示数据库操作命令
> db.help()
3.5.打印当前数据库用户列表
> show users
3.6.显示当前所在的数据库表信息
> show tables
3.7.删除一个表(集合)
> db.biao.drop()
true
3.8.命令行执行mongo命令
mongo --port 28017 --eval "show dbs"
echo "show dbs"|mongo --port 28017
4.插入数据
4.1.插入一条数据
mongodb数据库创建一个表,直接使用use命令进行就创建了,如果里面建了表,在show dbs的时候才能看到,否则没有数据的情况下是看不到的
插入数据时不需要先创建表,在插入数据时会自动将表创建出来
语法格式: db.表名.insert({“字段1”:“值1”,“字段2”:“值2”})
1.进入我们要创建数据的库
> use db_data
switched to db db_data2.在user_info表中插入数据
> db.user_info.insert({"name":"jiangxl","ad":"北京市","job":"linux"})
WriteResult({ "nInserted" : 1 })
> db.user_info.insert({"name":"xiaoming","ad":"石家庄市","job":"net"})
WriteResult({ "nInserted" : 1 })
> db.user_info.insert({"name":"xiaolan","ad":"太原市","job":"java"})
WriteResult({ "nInserted" : 1 })
> db.user_info.insert({"name":"xiaozi","ad":"石家庄市","job":"guanggao"})
WriteResult({ "nInserted" : 1 })3.查看表是否创建成功
> show tables
user_info4.查看表中的数据
> db.user_info.find()
表中的数据在插入时会自动生成一个_id字段作为主键,数据格式也是json格式
在user_info表中插入不同字段的数据
> db.user_info.insert({"name":"xiaoqiang","ad":"北京市朝阳区","job":"linux","sex":"boy","xinzi":"10k"})
WriteResult({ "nInserted" : 1 })
> db.user_info.insert({"name":"xiaowu","ad":"北京市东城区","job":"linux","sex":"boy","xinzi":"6k"})
WriteResult({ "nInserted" : 1 })
可以看到,不同的字段只要表名相同都可以插在一个表中,而mysql只能更新表结构才能达到这种效果
应用如果更新涉及到了新增某个表的字段,mongod只需要在下次插入数据时,指定上新字段即可生效
4.2.批量插入多条数据
语法格式:db.表名.insertMany([{“字段1”:“值1”,“字段2”:“值2”},{“字段1”:“值1”,“字段2”:“值2”}])
使用insertMany插入的数据,会自动生产ObjectId
> db.book_date.insertMany([{ "name":"nginx", "price":25, "num":100, "status":"N" },{ "name":"ansible", "price":50, "num":200 , "status":"A" },{ "name":"tomcat", "price":100, "num":150, "status":"T" },{ "name":"redis", "price":75, "num":320 , "status":"R" },{ "name":"docker", "price":45, "num":270, "status":"D" }
]);
{"acknowledged" : true,"insertedIds" : [ObjectId("602791d60ae90b3ed52d0247"),ObjectId("602791d60ae90b3ed52d0248"),ObjectId("602791d60ae90b3ed52d0249"),ObjectId("602791d60ae90b3ed52d024a"),ObjectId("602791d60ae90b3ed52d024b")]
}
>
> show tables;
book_date
user_info
>
> db.book_date.find()
4.3.插入嵌套数据
> db.nest_date.insertMany( [
... { "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
... { "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
... { "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
... { "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
... { "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
... ]);
{"acknowledged" : true,"insertedIds" : [ObjectId("60279b0d0ae90b3ed52d0251"),ObjectId("60279b0d0ae90b3ed52d0252"),ObjectId("60279b0d0ae90b3ed52d0253"),ObjectId("60279b0d0ae90b3ed52d0254"),ObjectId("60279b0d0ae90b3ed52d0255")]
}> show tables;
book_date
nest_date
user_info> db.nest_date.find()
{ "_id" : ObjectId("60279b0d0ae90b3ed52d0251"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "status" : "A" }
{ "_id" : ObjectId("60279b0d0ae90b3ed52d0252"), "item" : "notebook", "qty" : 50, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "A" }
{ "_id" : ObjectId("60279b0d0ae90b3ed52d0253"), "item" : "paper", "qty" : 100, "size" : { "h" : 8.5, "w" : 11, "uom" : "in" }, "status" : "D" }
{ "_id" : ObjectId("60279b0d0ae90b3ed52d0254"), "item" : "planner", "qty" : 75, "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "status" : "D" }
{ "_id" : ObjectId("60279b0d0ae90b3ed52d0255"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "status" : "A" }
5.查询数据
4中插入了一些数据,可以简单的练习查询
可以使用Navicat连接mongodb进行数据查询
find查询默认是and
语法格式:db.表名.find({“条件1”:“值1”,“条件2,”:“值2”})
db.表名.find({“条件1”:“值1”,“条件2,”:"{$lt:“值2”}})
或者查询
db.表名.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: …"值1"},{"条件2": {lt: 值2}}]})
5.1.查询book_date表中status包含N的数据
> db.book_date.find({"status":"N"})
{ "_id" : ObjectId("602792a80ae90b3ed52d024c"), "name" : "nginx", "price" : 25, "num" : 100, "status" : "N" }
navicat查询
5.2.查询nest_date表中size嵌套uom是cm并且qty小于50的数据
nest_date表中的size字段的数据时嵌套数据,因此在查询字段中嵌套的数据时需要使用"size.uom":“cm”
> db.nest_date.find({"size.uom":"cm","qty":{$lt:50}})
{ "_id" : ObjectId("60279b0d0ae90b3ed52d0251"), "item" : "journal", "qty" : 25, "size" : { "h" : 14, "w" : 21, "uom" : "cm" }, "status" : "A" }
{ "_id" : ObjectId("60279b0d0ae90b3ed52d0255"), "item" : "postcard", "qty" : 45, "size" : { "h" : 10, "w" : 15.25, "uom" : "cm" }, "status" : "A" }也可以使用Navicat拆一下显得好看
db.nest_date.find({"size.uom": "cm", //size等于cm"qty": { $lt: 50 //qty小于50}
})
navicat查询
5.3.查询nest_date表中size嵌套uom是cm并且qty等于75的数据
> db.nest_date.find({
... "size.uom": "cm",
... "qty": {
... $eq: 75
... }
... })
{ "_id" : ObjectId("60279b0d0ae90b3ed52d0254"), "item" : "planner", "qty" : 75, "size" : { "h" : 22.85, "w" : 30, "uom" : "cm" }, "status" : "D" }解释:
db.nest_date.find({"size.uom": "cm", //uom为cm的"qty": {$eq: 75 //qty等于75的}
})
navicat查询
5.4.查询book_date表status等于T或者price小于50的数据
> db.book_date.find({$or: [{"status": "T"},{"price": {$lt: 50}}]})
{ "_id" : ObjectId("602792a80ae90b3ed52d024c"), "name" : "nginx", "price" : 25, "num" : 100, "status" : "N" }
{ "_id" : ObjectId("602792a80ae90b3ed52d024e"), "name" : "tomcat", "price" : 100, "num" : 150, "status" : "T" }
{ "_id" : ObjectId("602792a80ae90b3ed52d0250"), "name" : "docker", "price" : 45, "num" : 270, "status" : "D" }解释:
db.book_date.find({ $or: [ //或者{"status": "T" //staus等于T的},{"price": {$lt: 50 //price小于50的}}]
})
navicat查询
5.5.正则查询表中数据
查询book_date表中status为D并且price小于50和name以do开头两者满足其一的数据
> db.book_date.find({"status":"D",$or: [{"price":{$lt:30}},{"name": /^do/}]})
{ "_id" : ObjectId("602792a80ae90b3ed52d0250"), "name" : "docker", "price" : 45, "num" : 270, "status" : "D" }解释:
db.book_date.find({"status": "D", //status为D的$or: [{"price": { //price小于30的$lt: 30}}, {"name": /^do/ //name以do开头的}]
})
navicat查询
5.6.查询表中第一条数据
> db.book_date.findOne()
{"_id" : ObjectId("602792a80ae90b3ed52d024c"),"name" : "nginx","price" : 25,"num" : 100,"status" : "N"
}
6.更新数据
mongodb更新一条数据后,会在最后增加一个新的字段,记录更新的时间
语法格式:
更新一条数据:db.表名.updateOne({“匹配条件1”:"值"1},{set:"更新的字段1":"新值1","更新字段2":"新值2",set:{"更新的字段1":"新值1","更新字段2":"新值2"},set:"更新的字段1":"新值1","更新字段2":"新值2",currentDate:{“lastModified”:true}})
更新多条数据:db.表名.updateMany({“匹配条件1”:"值"1},{set:"更新的字段1":"新值1","更新字段2":"新值2",set:{"更新的字段1":"新值1","更新字段2":"新值2"},set:"更新的字段1":"新值1","更新字段2":"新值2",currentDate:{“lastModified”:true}})
使用update更新:db.表名.update({“匹配条件1”:"值"1},{set:"更新的字段1":"新值1","更新字段2":"新值2",set:{"更新的字段1":"新值1","更新字段2":"新值2"},set:"更新的字段1":"新值1","更新字段2":"新值2",currentDate:{“lastModified”:true}})
更新多条数据:
6.1.更新一条数据
将name等于nginx的数据中的price改为70,num改为230
1.查询要更新的数据
> db.book_date.find({"name":"nginx"})
{ "_id" : ObjectId("602792a80ae90b3ed52d024c"), "name" : "nginx", "price" : 25, "num" : 100, "status" : "N" }2.更新语句
> db.book_date.updateOne({"name":"nginx"},{$set:{"price":70,"num":230},$currentDate:{"lastModified":true}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }3.查看数据是否更新
> db.book_date.find()
{ "_id" : ObjectId("6027de7f0ae90b3ed52d0256"), "name" : "nginx", "price" : 70, "num" : 230, "status" : "N", "lastModified" : ISODate("2021-02-13T14:14:01.526Z") }
{ "_id" : ObjectId("6027de7f0ae90b3ed52d0257"), "name" : "ansible", "price" : 50, "num" : 200, "status" : "A" }
{ "_id" : ObjectId("6027de7f0ae90b3ed52d0258"), "name" : "tomcat", "price" : 100, "num" : 150, "status" : "T" }
{ "_id" : ObjectId("6027de7f0ae90b3ed52d0259"), "name" : "redis", "price" : 75, "num" : 320, "status" : "R" }
{ "_id" : ObjectId("6027de7f0ae90b3ed52d025a"), "name" : "docker", "price" : 45, "num" : 270, "status" : "D" }
更新语句解释
db.book_date.updateOne({"name": "nginx" //要匹配的数据,当数据中name是nginx的数据
}, {$set: { //要修改的内容"price": 70, //price修改为70"num": 230 //num修改为230},$currentDate: {"lastModified": true //增加一个字段,每次更新都记录时间}
})
6.2.匹配多个条件更新
将name等于nginx并且status等于N的数据进行更新,将price修改为70,num修改为230,status修改为Nginx
db.book_date.updateOne({"name": "nginx", //条件1"status":"N" //条件2
}, {$set: { //更新的内容"price": 70,"num": 230,"status":"Nginx"},$currentDate: {"lastModified": true}
})
更新成功
6.3.更新多条数据
num小于250的数据,将price修改为99,num修改为530
> db.book_date.updateMany({"num":{$lt:250}},{$set:{"price":"99","num":"530"},$currentDate:{"lastModified":true}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }> db.book_date.find()
{ "_id" : ObjectId("602792a80ae90b3ed52d024c"), "name" : "nginx", "price" : "70", "num" : "230", "status" : "Nginx", "lastModified" : ISODate("2021-02-13T11:19:38.473Z") }
{ "_id" : ObjectId("602792a80ae90b3ed52d024d"), "name" : "ansible", "price" : "99", "num" : "530", "status" : "A", "lastModified" : ISODate("2021-02-13T11:24:46.045Z") }
{ "_id" : ObjectId("602792a80ae90b3ed52d024e"), "name" : "tomcat", "price" : "99", "num" : "530", "status" : "T", "lastModified" : ISODate("2021-02-13T11:23:59.063Z") }
{ "_id" : ObjectId("602792a80ae90b3ed52d024f"), "name" : "redis", "price" : 75, "num" : 320, "status" : "R" }
{ "_id" : ObjectId("602792a80ae90b3ed52d0250"), "name" : "docker", "price" : 45, "num" : 270, "status" : "D" }解释:
db.book_date.updateMany({"num": {$lt: 300 //num小于300的全部数据}
}, {$set: {"price": "99", //price更新为99"num": "530" //num更新为530},$currentDate: {"lastModified": true}
})
更新成功
6.4.使用update更新一条数据
db.book_date.update({"name": "nginx"
}, {$set: {"price": "70","num": "230","status":"nginx"},$currentDate: {"lastModified": true}
})
7.删除数据
语法格式:
删除一个:db.表名.deleteOne({“条件1”:“值1”})
删除多个:db.表名.deleteMany({“条件1”:“值1”})
7.1.删除一条数据
> db.book_date.deleteOne({"name":"nginx"})
{ "acknowledged" : true, "deletedCount" : 1 }
7.2.删除多条数据
> db.book_date.deleteMany({"num":{$lt:500}})
{ "acknowledged" : true, "deletedCount" : 2 }
MongoDB数据库增删改查基本使用相关推荐
- MongoDB的增删改查操作
前面介绍了MongoDB的基本概念与常见的操作,本文来重点分析下MongoDB的增删改查操作 文章目录 什么是"mongo" 新增操作 删除操作 更新操作 查询操作 Where语句 ...
- SpringBoot增和MongoDB实现增删改查、复合查询
SpringBoot增和MongoDB实现增删改查.复合查询 依赖 <dependency><groupId>org.springframework.boot</grou ...
- python mongodb_python实现mongodb的增删改查
python实现mongodb的增删改查 环境: 192.168.122.1 python 192.168.122.11 mongodb 一.安装pip,python的管理工具 官网下载: pip-1 ...
- mongodb android,Android编程连接MongoDB及增删改查等基本操作示例
本文实例讲述了Android编程连接MongoDB及增删改查等基本操作.分享给大家供大家参考,具体如下: MongoDB简介 Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提 ...
- 常用的Mybatis-Plus方法,让你的数据库增删改查(CRUD)一键实现
常用的Mybatis-Plus方法,让你的数据库增删改查(CRUD)一键实现 以下方法全部亲测可用 //测试查找全部@Testpublic void testSelectAll(){List<U ...
- Mysql (一)Mysql 数据库增删改查
mysql数据库增删改查增:create database DBname charset gbk; 删:drop database DBname; 改:alter database DBname ch ...
- sql增删改查_快速搞定数据库增删改查|附思维导图
数据库学习,增删改查一直是测试工程师面试笔试的必考知识点,对于常用sql语法我们一定要牢记于心,尤其是各种查询的用法,在面试的时候,一个小小的知识点,面试官都可以推断出求职者的基础是否扎实. 下面是关 ...
- Java+MyEclipse+Tomcat (六)详解Servlet和DAO数据库增删改查操作
此篇文章主要讲述DAO.Java Bean和Servlet实现操作数据库,把链接数据库.数据库操作.前端界面显示分模块化实现.其中包括数据的CRUD增删改查操作,并通过一个常用的JSP网站前端模板界面 ...
- php+mysql+into_PHP+Mysql 如何实现数据库增删改查
PHP+Mysql实现数据库增删改查的方法:1.创建入口文件[index.html]连接数据库.查询数据:2.点击增加按钮,通过[addnews.html]添加数据:3.点击删除按钮,通过服务端文件[ ...
最新文章
- python分数运算使用Fraction模块
- 同一个页面生成多个sessionid_web页面渲染(一)
- php实现栏目三种类型,WordPress后台edit-tags.php里无限栏目分类实现
- 目标检测——YOLO系列算法(YOLOv4、YOLOv5)的学习笔记
- 百度悄然发布Deep Vioce 3
- 洛谷 P1048 采药 01背包入门
- python部署服务器 venv_迁移virtualenv环境
- ps切图导出html,ps网页切图-如何用PS切图和输出网页
- Android页面引导蒙版(浮层)库
- android 获取收到短信验证码,Android自动获取短信验证码
- 消除LightGBM训练过程中出现的[LightGBM] [Warning] No further splits with positive gain, best gain: -inf
- python远程聊天_Python实现多人在线匿名聊天的小程序
- Centos7.x实现Cobbler无人值守安装
- 前台获取服务器端的值
- python按指定数量划分图片与对应的xml数据(.png格式为列)
- Linux IPC:匿名管道 与 命名管道
- 连锁不平衡:linkage disequilibrium
- SNMP Private Enterprise Number 申请流程
- Python实现knn分类算法(Iris 数据集)
- 求Sn=a+aa+aaa...+aaaaa的值,比如2+22+222+2222+222222