当前位置: 首页 > news >正文

mongoDB的CRUD

mongo的连接

        可以通过部署图形化控制台,mongodb compass来实现连接,也可以通过shell控制台来连接

# 连接命令(4.几版本)
mongo --host=127.0.0.1 --port=27017 or
# 7.几版本
mongosh 

moogo的数据库操作

# 展示数据库
show dbsshow databases# 创建/选择数据库
# 有则切换,无则创建
use mydb # 此时执行show dbs 命令还是看不到mydb,因为此时没数据,还没持久化到磁盘。# 查看当前正在使用的db
db# 删除,切换到要删除的数据库,直接执行如下命令,主要用来删除已经持久化的数据库
db.dropDatabase()

mongo集合(cocollection 相当于mysql中的表)的操作

集合的创建/删除

# 显示创建
db.createCollection(name)# 查看当前库中的表:show tables命令
show tables  
or 
show collections############################ 删除
db.collection.drop()

文档的操作(数据,对应mysql的行)

插入

db.collection.insert()

# 单文档插入 insert
db.comment.insert({"articleid": "100000","content": "今天天气真好,阳光明媚","userid": "1001","nickname": "Rose","createdatetime": new Date(),  "likenum": NumberInt(10),      "state": null
})###################################################1)comment集合如果不存在,则会隐式创建
2)mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题了。
3)插入当前日期使用 new Date()
4)插入的数据没有指定_id,会自动生成主键值
5)如果某字段没值,可以赋值为null,或不写该字段。
################################################################ 多文档插入 insertManydb.comment.insertMany([{"_id": "1","articleid": "100001","content": "我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我他。","userid": "1002","nickname": "相忘于江湖","createdatetime": ISODate("2019-08-05T22:08:15.522Z"),"likenum": NumberInt(1000),"state": "1"},{"_id": "2","articleid": "100001","content": "我夏天空腹喝凉开水,冬天喝温开水","userid": "1005","nickname": "伊人憔悴","createdatetime": ISODate("2019-08-05T23:58:51.485Z"),"likenum": NumberInt(888),"state": "1"},{"_id": "3","articleid": "100001","content": "我一直喝凉开水,冬天夏天都喝。","userid": "1004","nickname": "杰克船长","createdatetime": ISODate("2019-08-06T01:05:06.321Z"),"likenum": NumberInt(666),"state": "1"},{"_id": "4","articleid": "100001","content": "专家说不能空腹吃饭,影响健康。","userid": "1003","nickname": "凯","createdatetime": ISODate("2019-08-06T08:18:35.288Z"),"likenum": NumberInt(2000),"state": "1"},{"_id": "5","articleid": "100001","content": "研究表明,刚烧开的水千万不能喝,因为烫嘴。","userid": "1003","nickname": "凯撒","createdatetime": ISODate("2019-08-06T11:01:02.521Z"),"likenum": NumberInt(3000),"state": "1"}
]);

如果某条数据插入失败,将会终止插入,但已经插入成功的数据不会回滚掉。

因为批量插入由于数据较多容易出现失败,因此,可以使用try catch进行异常捕捉处理

try {db.comment.insertMany([{"_id": "1","articleid": "100001","content": "我们不应该把清晨浪费在手机上,健康很重要,一杯温水幸福你我他。","userid": "1002","nickname": "相忘于江湖","createdatetime": ISODate("2019-08-05T22:08:15.522Z"),"likenum": NumberInt(1000),"state": "1"},{"_id": "2","articleid": "100001","content": "我夏天空腹喝凉开水,冬天喝温开水","userid": "1005","nickname": "伊人憔悴","createdatetime": ISODate("2019-08-05T23:58:51.485Z"),"likenum": NumberInt(888),"state": "1"},{"_id": "3","articleid": "100001","content": "我一直喝凉开水,冬天夏天都喝。","userid": "1004","nickname": "杰克船长","createdatetime": ISODate("2019-08-06T01:05:06.321Z"),"likenum": NumberInt(666),"state": "1"},{"_id": "4","articleid": "100001","content": "专家说不能空腹吃饭,影响健康。","userid": "1003","nickname": "凯","createdatetime": ISODate("2019-08-06T08:18:35.288Z"),"likenum": NumberInt(2000),"state": "1"},{"_id": "5","articleid": "100001","content": "研究表明,刚烧开的水千万不能喝,因为烫嘴。","userid": "1003","nickname": "凯撒","createdatetime": ISODate("2019-08-06T11:01:02.521Z"),"likenum": NumberInt(3000),"state": "1"}]);
} catch (e) {print(e);
}

修改

db.collection.update(query, update, options)


# 覆盖的修改
#如果我们想修改_id为1的记录,点赞量为1001
db.comment.update({_id:"1"},{likenum:NumberInt(1001)})# 执行后,我们会发现,这条文档除了likenum字段其它字段都不见了#局部修改 $set
#我们想修改_id为2的记录,浏览量为889,输入以下语句
db.comment.update({_id:"2"},{$set:{likenum:NumberInt(889)}})#批量的修改
#更新所有用户为 1003的用户的昵称为 凯撒大帝 。
//默认只修改第一条数据
db.comment.update({userid:"1003"},{$set:{nickname:"凯撒2"}})
//修改所有符合条件的数据
db.comment.update({userid:"1003"},{$set:{nickname:"凯撒大帝"}},{multi:true})

删除

db.集合名称.remove(条件)

# 删除所有
db.comment.remove({})# 删除id为1的
db.comment.remove({_id:"1"})

查询

基本查询

db.collection.find(<query>, [projection])

# 查询所有
db.comment.find()
db.comment.find({})# 查询userid为1003
db.comment.find({userid:"1003"})# 查询一条,findOne()
# 查询用户编号是1003的记录,但只最多返回符合条件的第一条
db.comment.findOne(userid:"1003"}
投影查询

如果要查询结果返回部分字段,则需要使用投影查询

# 查询结果只显示_id、userid、nickname
db.comment.find({userid:"1003"},{userid:1,nickname:1})# 默认_id会显示# 查询结果只显示、userid、nickname,不显示_id
db.comment.find({userid:"1003"},{userid:1,nickname:1,_id:0})# 查询所有数据,但只显示_id、userid、nickname:
db.comment.find({},{userid:1,nickname:1})
分页查询
统计查询--count()

db.collection.count(query, options)

# 统计comment集合的所有的记录数
db.comment.count()# 统计userid为1003的记录条数
db.comment.count({userid:"1003"})
分页列表查询--limit(),skip()

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)

# 返回指定条数的记录,可以在find方法后调用limit来返回结果(TopN),默认值20
# 返回前三条
db.comment.find().limit(3)
# skip方法同样接受一个数字参数作为跳过的记录条数。(前N个不要),默认值是0
# 跳过前三条
db.comment.find().skip(3)#######################################
# 需求:每页2个,第二页开始:跳过前两条数据,接着值显示3和4条数据
# 第一页
db.comment.find().skip(0).limit(2)
# 第二页
db.comment.find().skip(2).limit(2)
# 第三页
db.comment.find().skip(4).limit(2)

排序查询-- sort()

db.COLLECTION_NAME.find().sort({KEY:1})

其中1为升序,-1为降序

# 对userid降序排列,并对访问量进行升序排列
db.comment.find().sort({userid:-1,likenum:1})

skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit(),和命令编写顺序无关。

正则查询

支持js的正则表达式

db.collection.find({field:/正则表达式/})

# 我要查询评论内容包含“开水”的所有文档
db.comment.find({content:/开水/})# 如果要查询评论的内容中以“专家”开头的
db.comment.find({content:/^专家/})
比较查询
db.集合名称.find({ "field" : { $gt: value }}) // 大于: field > value
db.集合名称.find({ "field" : { $lt: value }}) // 小于: field < value
db.集合名称.find({ "field" : { $gte: value }}) // 大于等于: field >= value
db.集合名称.find({ "field" : { $lte: value }}) // 小于等于: field <= value
db.集合名称.find({ "field" : { $ne: value }}) // 不等于: field != value
# 评论点赞数量大于700的记录
db.comment.find({likenum:{$gt:NumberInt(700)}})
包含查询--$in
# 示例:查询评论的集合中userid字段包含1003或1004的文档
db.comment.find({userid:{$in:["1003","1004"]}})###. 不包含使用$nin操作符。  #### 示例:查询评论集合中userid字段不包含1003和1004的文档
db.comment.find({userid:{$nin:["1003","1004"]}})
条件连接查询--and,or

$and:[ { },{ },{ } ]

$or:[ { },{ },{ } ]

# 查询评论集合中likenum大于等于700 并且小于2000的文档:db.commnet.find({$and:[{likenum:{$gte:NumberInt(700)}},{}likenum:{$lt:{NumberInt(2000)}}]})# 查询评论集合中userid为1003,或者点赞数小于1000的文档记录db.comment.find({$or:[{userid:"1003"},{likenum:{$lt:{NumberInt(1000)}}}]})


文章转载自:
http://acer.dxwdwl.cn
http://cellaret.dxwdwl.cn
http://blandish.dxwdwl.cn
http://accede.dxwdwl.cn
http://broider.dxwdwl.cn
http://chromatolytic.dxwdwl.cn
http://adoptive.dxwdwl.cn
http://aquosity.dxwdwl.cn
http://acidy.dxwdwl.cn
http://bevatron.dxwdwl.cn
http://allegiant.dxwdwl.cn
http://cantonization.dxwdwl.cn
http://appeasement.dxwdwl.cn
http://carrycot.dxwdwl.cn
http://chlordane.dxwdwl.cn
http://cerise.dxwdwl.cn
http://bureaux.dxwdwl.cn
http://anuretic.dxwdwl.cn
http://appeaser.dxwdwl.cn
http://berne.dxwdwl.cn
http://captainship.dxwdwl.cn
http://cheerleading.dxwdwl.cn
http://chamberlain.dxwdwl.cn
http://berceau.dxwdwl.cn
http://bist.dxwdwl.cn
http://aluminite.dxwdwl.cn
http://bouncing.dxwdwl.cn
http://annelida.dxwdwl.cn
http://carlet.dxwdwl.cn
http://chariness.dxwdwl.cn
http://www.dtcms.com/a/280815.html

相关文章:

  • Visual Studio 现已支持新的、更简洁的解决方案文件(slnx)格式
  • 云服务器如何管理数据库(MySQL/MongoDB)?
  • 基于STM32G431无刷电机驱动FOC软硬件学习
  • iOS高级开发工程师面试——常见第三方框架架构设计
  • C++学习笔记五
  • Gemma-3n-E4B-it本地部署教程:谷歌开源轻量级多模态大模型,碾压 17B 级同类模型!
  • SHAP 值的数值尺度
  • Conda 核心命令快速查阅表
  • 技术演进中的开发沉思-35 MFC系列:消息映射与命令
  • Keepalived双机热备
  • 网络安全职业指南:探索网络安全领域的各种角色
  • 003大模型基础知识
  • React 实现老虎机滚动动画效果实例
  • AutojsPro 9.3.11 简单hook
  • Pixel Reasoner:通过好奇心驱动的强化学习激励像素空间推理
  • 简单2步配置CadenceSkill开发编辑器,支持关键字高亮
  • [AI-video] Web UI | Streamlit(py to web) | 应用配置config.toml
  • (李宏毅)deep learning(五)--learning rate
  • 从底层技术到产业落地:优秘企业智脑的 AI 革命路径解析
  • NAT的核心原理以及配置
  • CCF-GESP 等级考试 2025年6月认证Python四级真题解析
  • RDMA over RoCE V2设计2:系统框架设计考虑
  • Datawhale AI夏令营 机器学习2.1
  • 详解低速容错CAN(附与高速CAN对比表)
  • RabbitMQ第三章(企业级MQ应用方案)
  • 基于uniapp+vue3封装的一个日期选择组件
  • 【图像处理基石】什么是解析力?
  • A*算法详解
  • Transformer江湖录 第九章:大道归一 - 总结与展望
  • 鸿蒙和Android知识点