【mongo 系列】常用操作实际操练

2023-10-25 09:50

本文主要是介绍【mongo 系列】常用操作实际操练,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【mongo 系列】常用操作实际操练

插入数据

> db.users.insert({"name" : "xiaomotong""age" : 18})

>
 db.users.insert({name:"xiaozhu",age:15,hobby:"basketball",infos:{tall:190,height:70},school:"sh"})

>
 db.users.insertMany([{name:"xiaopang"},{name:"wangwu"}])

>
 db.users.insertMany([{name:"nancy""age" :25, "hobby" : "study""infos" : { "tall" : 175, "height" : 60 }, "school" : "hn" },{name:"job""age" : 19, "hobby" : "basketball""infos" : { "tall" : 170, "height" : 70 }, "school" : "nj" }])
  • 可以使用 insert,insertOne,insertMany 插入不同的数据,各取所需,其中 insertMany 用于插入多条数据,当然也可以插入 1 条数据

mongodb 在插入数据上面还有这么多函数方法可以使用,各取所需

更新数据


>
 db.users.find()
{ "_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaomotong", "age" : 18 }
...

>
 db.users.update({name:"xiaomotong"},{$set:{name:"xiaokeai",age:25,hobby:"reading",infos:{tall:175,height:62},school:"cs"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

使用 $set 表示需要更新字段

查询数据的时候我们发现,mongodb 自动在我们的文档中加入了 _id 字段,这是一个主键,如果不自己设置的话,mongodb 为默认给我们加上,是一个 24 位的 uuid

关于更新的方法,官网还提供了这些方法:

查找数据

> db.users.find({"infos.tall":{$gt:170}})
{ "_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaokeai", "age" : 25, "hobby" : "reading", "infos" : { "tall" : 175, "height" : 62 }, "school" : "cs" }
{ "_id" : ObjectId("615a56d6bc6afecd2cff8f96"), "name" : "xiaozhu", "age" : 15, "hobby" : "basketball", "infos" : { "tall" : 190, "height" : 70 }, "school" : "sh" }
{ "_id" : ObjectId("615a5917d988690b07c69f66"), "name" : "nancy", "age" : 25, "hobby" : "study", "infos" : { "tall" : 175, "height" : 60 }, "school" : "hn" }

此处的 $gt 是大于 的意思,上期有说到这些运算符,再来回顾一遍

上述 infos.tall 属于子查询,表示 infos 是一个内嵌文档,需要查找的是 文档中的 tall 字段,我们也不能不加双引号,因为系统会默认识别 infos.tall 为一个字段,实际上是找不到这个字段的,因此是查询不到结果的,如下报错:

> db.users.find({infos.tall:{$gt:170}})
2021-10-04T09:39:21.349+0800 E  QUERY    [js] uncaught exception: SyntaxError: missing : after property id :
@(shell):1:20

以更加友好的方式查询数据展示出来

> db.users.find({"infos.tall":{$gte:180}}).pretty()
{
        "_id" : ObjectId("615a56d6bc6afecd2cff8f96"),
        "name" : "xiaozhu",
        "age" : 15,
        "hobby" : "basketball",
        "infos" : {
                "tall" : 190,
                "height" : 70
        },
        "school" : "sh"
}

此处的 db.users.find({"infos.tall":{$gte:180}}) 就类似于关系型数据库的 sql 语句:select * from users where "infos.tall" >= 180

例如查询,身高在 是 175 或者 190 的学生.

此处的 db.users.find({"infos.tall":{$in:[190,175]}}) 就类似与关系型数据库的 select * from users where "infos.tall" in (190,175)

演示一下简单的正则表达式:

> db.users.find({name:/^w/}).pretty()
{ "_id" : ObjectId("615a5856d988690b07c69f65"), "name" : "wangwu" }
> db.users.find({name:/g$/}).pretty()
{ "_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }
  • 查询 name 字段,匹配 w 开头的结果,匹配出来 wangwu
  • 查询 name 资源,匹配 g 结尾的结果,匹配出来 xiaotong

此处在我们查询的时候,/正则表达式/,mongodb 会自动识别并按照正则表达式的规则进行匹配和处理

我们也可以查询 null

> db.users.find({infos:null})
{ "_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }
{ "_id" : ObjectId("615a5856d988690b07c69f65"), "name" : "wangwu" }

>
 db.users.find({infos:{$exists:false}})
{ "_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }

查询字段为 null 可以使用第一种方式,查询字段不存在可以使用第二种方式

删除数据

> db.users.deleteOne({name:"wangwu"})
{ "acknowledged" : true, "deletedCount" : 1 }
> db.users.find({name:/^w/}).pretty()
>

常用的删除方法有:

  • db.users.deleteOne()
  • db.users.deleteMany()
  • db.users.remove()

简单分页查询

> use mytest
switched to db mytest
> db.users.find()
{ "_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaokeai", "age" : 25, "hobby" : "reading", "infos" : { "tall" : 175, "height" : 62 }, "school" : "cs" }
{ "_id" : ObjectId("615a56d6bc6afecd2cff8f96"), "name" : "xiaozhu", "age" : 15, "hobby" : "basketball", "infos" : { "tall" : 190, "height" : 70 }, "school" : "sh" }
{ "_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }
{ "_id" : ObjectId("615a5917d988690b07c69f66"), "name" : "nancy", "age" : 25, "hobby" : "study", "infos" : { "tall" : 175, "height" : 60 }, "school" : "hn" }
{ "_id" : ObjectId("615a5917d988690b07c69f67"), "name" : "job", "age" : 19, "hobby" : "basketball", "infos" : { "tall" : 170, "height" : 70 }, "school" : "nj" }

>
 db.users.find().limit(2)
{ "_id" : ObjectId("61584aeeee74dfe04dac57e9"), "name" : "xiaokeai", "age" : 25, "hobby" : "reading", "infos" : { "tall" : 175, "height" : 62 }, "school" : "cs" }
{ "_id" : ObjectId("615a56d6bc6afecd2cff8f96"), "name" : "xiaozhu", "age" : 15, "hobby" : "basketball", "infos" : { "tall" : 190, "height" : 70 }, "school" : "sh" }

>
 db.users.find().skip(2).limit(2)
{ "_id" : ObjectId("615a5856d988690b07c69f64"), "name" : "xiaopang" }
{ "_id" : ObjectId("615a5917d988690b07c69f66"), "name" : "nancy", "age" : 25, "hobby" : "study", "infos" : { "tall" : 175, "height" : 60 }, "school" : "hn" }

  • db.users.find() 查询所有的数据,按照默认的顺序打印出来
  • db.users.find().limit(2) 从前面的结果中,限制取出 2 条
  • db.users.find().skip(2).limit(2)从前面的结果中,偏移 2 条,再限制取出 2 条

下一次,梳理聚合相关内容

官方一手资料:https://docs.mongodb.com/manual/reference

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

这篇关于【mongo 系列】常用操作实际操练的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/281752

相关文章

Git可视化管理工具(SourceTree)使用操作大全经典

《Git可视化管理工具(SourceTree)使用操作大全经典》本文详细介绍了SourceTree作为Git可视化管理工具的常用操作,包括连接远程仓库、添加SSH密钥、克隆仓库、设置默认项目目录、代码... 目录前言:连接Gitee or github,获取代码:在SourceTree中添加SSH密钥:Cl

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1

C语言中位操作的实际应用举例

《C语言中位操作的实际应用举例》:本文主要介绍C语言中位操作的实际应用,总结了位操作的使用场景,并指出了需要注意的问题,如可读性、平台依赖性和溢出风险,文中通过代码介绍的非常详细,需要的朋友可以参... 目录1. 嵌入式系统与硬件寄存器操作2. 网络协议解析3. 图像处理与颜色编码4. 高效处理布尔标志集合

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python ZIP文件操作技巧详解

《PythonZIP文件操作技巧详解》在数据处理和系统开发中,ZIP文件操作是开发者必须掌握的核心技能,Python标准库提供的zipfile模块以简洁的API和跨平台特性,成为处理ZIP文件的首选... 目录一、ZIP文件操作基础三板斧1.1 创建压缩包1.2 解压操作1.3 文件遍历与信息获取二、进阶技

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

usb接口驱动异常问题常用解决方案

《usb接口驱动异常问题常用解决方案》当遇到USB接口驱动异常时,可以通过多种方法来解决,其中主要就包括重装USB控制器、禁用USB选择性暂停设置、更新或安装新的主板驱动等... usb接口驱动异常怎么办,USB接口驱动异常是常见问题,通常由驱动损坏、系统更新冲突、硬件故障或电源管理设置导致。以下是常用解决