Mongodb语法使用说明(含详细示例)

news2025/1/16 11:16:04

点击下载《Mongodb语法使用说明(含详细示例)》

1. 前言

MongoDB是一款高性能、开源、面向文档的NoSQL数据库,它使用类似JSON的BSON格式存储数据,提供了灵活的数据模型和强大的查询功能。本文将详细介绍MongoDB数据库的基本增删改查(CRUD)操作,并通过示例展示如何使用MongoDB SQL(MongoDB Shell命令)来执行这些操作。

在这里插入图片描述

2. Mongodb介绍

MongoDB是一个基于分布式文件存储的数据库,它使用C++语言编写,旨在为Web应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,它支持的数据结构非常松散,类似于json的bson格式,因此可以存储比较复杂的数据类型。MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

MongoDB使用文档数据模型来存储数据,这使得它非常适合存储半结构化数据,例如JSON文档。这种数据模型非常灵活,可以轻松地进行嵌套和复杂查询。MongoDB支持各种数据类型,包括数字、日期、字符串、数组和嵌入式文档等,这使得它非常适合存储不同类型的数据。

此外,MongoDB还支持水平扩展,可以在多个服务器之间分布数据,从而实现更高的可用性和性能。MongoDB还提供了许多高级功能,例如全文搜索、地理空间索引和图形搜索等,它还有一个强大的聚合框架,可以用于数据聚合和分析。

MongoDB的应用场景非常广泛,包括游戏场景、物流场景、社交场景、物联网场景和视频直播等。例如,在游戏场景中,MongoDB可以存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新;在物流场景中,MongoDB可以存储订单信息,订单状态在运送过程中会不断更新,以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来。

3. 使用示例

3.1 创建和选择数据库

// 创建数据库  
use mydatabase  
  
// 查看当前数据库  
db  
  
// 查看所有数据库  
show dbs

3.2 创建和删除集合

// 显式创建集合  
db.createCollection("mycollection")  
  
// 隐式创建集合(插入文档时自动创建)  
db.myimplicitcollection.insertOne({name: "Alice"})  
  
// 删除集合  
db.mycollection.drop()

3.3 插入文档

// 插入单个文档  
db.students.insertOne({  
    "_id": ObjectId("60f349943128e3a7d5484567"),  
    "name": "张三",  
    "age": 20,  
    "gender": "男"  
})  
  
// 插入多个文档  
db.students.insertMany([  
    {  
        "name": "李四",  
        "age": 22,  
        "gender": "男"  
    },  
    {  
        "name": "王五",  
        "age": 19,  
        "gender": "女"  
    }  
])

3.4 查询文档

// 查询所有文档  
db.students.find()  
  
// 查询指定条件的文档  
db.students.find({age: {$gt: 20}})  
  
// 查询并限制返回的字段  
db.students.find({}, {name: 1, _id: 0})  
  
// 查询并排序  
db.students.find().sort({age: -1})  
  
// 查询并限制返回的文档数量  
db.students.find().limit(5)  
  
// 查询并跳过指定数量的文档  
db.students.find().skip(10)  
  
// 查询文档计数  
db.students.countDocuments({age: {$gt: 20}})  
  
// 使用正则表达式查询  
db.students.find({name: {$regex: /四/}})

3.5 更新文档

// 更新单个文档的部分字段  
db.students.updateOne({name: "张三"}, {$set: {age: 21}})  
  
// 更新多个文档的部分字段  
db.students.updateMany({gender: "男"}, {$set: {class: "一班"}})  
  
// 使用upsert选项,如果不存在则插入新文档  
db.students.updateOne({name: "赵六"}, {$setOnInsert: {age: 23}}, {upsert: true})  
  
// 替换整个文档  
db.students.replaceOne({name: "李四"}, {name: "李四新", age: 24, gender: "男"})

3.6 删除文档

// 删除单个文档  
db.students.deleteOne({name: "王五"})  
  
// 删除多个文档  
db.students.deleteMany({age: {$lt: 20}})

3.7 使用索引

// 创建单字段索引  
db.students.createIndex({age: 1})  
  
// 创建复合索引  
db.students.createIndex({name: 1, age: -1})  
  
// 查看集合的索引  
db.students.getIndexes()  
  
// 删除索引  
db.students.dropIndex("age_1")

3.8 聚合管道

// 使用聚合计算学生平均年龄  
db.students.aggregate([  
    {$group: {_id: null, avgAge: {$avg: "$age"}}}  
])  
  
// 使用聚合和排序获取年龄最大的学生  
db.students.aggregate([  
    {$sort: {age: -1}},  
    {$limit: 1}  
])  
  
// 使用聚合进行条件过滤和分组  
db.students.aggregate([  
    {$match: {gender: "男"}},  
    {$group: {_id: "$class", count: {$sum: 1}}}  
])

4. 总结

通过本文的探讨,我们深入了解了如何使用SQL语法操作MongoDB数据库。虽然MongoDB本质上是一个面向文档的NoSQL数据库,但通过使用一些扩展和工具,我们仍然可以使用类似SQL的语法来执行常见的数据库操作。

文章通过丰富的示例和说明,展示了如何在MongoDB中执行基本的增删改查操作。这些示例不仅涵盖了简单的数据查询,还涉及了更复杂的聚合操作和数据转换。通过使用这些SQL风格的语法,即使是对MongoDB不太熟悉的开发者也能快速上手,并有效地处理数据。

此外,文章还强调了使用SQL语法操作MongoDB的注意事项和局限性。尽管这种方法在某些场景下非常有用,但它并不能完全替代MongoDB的原生查询语言。因此,开发者在使用时应根据具体需求选择合适的方法,并结合MongoDB的特性和优势来优化数据操作。

点击下载《Mongodb语法使用说明(含详细示例)》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1623113.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器学习-期末复习

本文的内容按照作者的课程考试要求书写,仅供复习参考。🌷🌷🌷欢迎大家指正! 机器学习是一种人工智能(AI)的分支领域,它致力于开发能够通过数据学习和改进的算法和模型。简而言之&…

深入学习Linux中的“文件系统与日志分析”

目录 1.文件系统的组成 1.1inode和block 1.2inode的内容 1.3inode的号码 ​1.4文件存储小结 ​1.5inode大小 1.6inode的特殊作用 2. 链接文件 3.文件恢复 3.1EXT类型文件恢复 3.2磁盘有空间,但是仍然无法写入新文件 3.3恢复XFS类型的文件 3.3.1xfsdump…

面试:JVM内存结构

一、Java代码的运行步骤 一段Java代码先会被反编译为Java字节码,当执行java命令时,JVM虚拟机会被创建出来,并会创建一个main主线程来执行主方法。 二、JVM的内存结构有哪些? 1、方法区:(线程共享&#xff…

实验五 Spark SQL编程初级实践

Spark SQL编程初级实践 Spark SQL基本操作 将下列JSON格式数据复制到Linux系统中,并保存命名为employee.json。 { "id":1 , "name":" Ella" , "age":36 } { "id":2, "name":"Bob","a…

婴儿专用洗衣机有必要吗?四大宝藏婴儿洗衣机测评对比

对于有了宝宝的家庭来说,洗衣成为了一项重要的家务事。大家都知道,宝宝的皮肤比较娇嫩,容易受到各种细菌、病毒的侵扰。所以,宝宝的衣物应该与大人的分开洗。婴儿洗衣机作为一种专门为婴幼儿家庭设计的洗衣机,其具有除…

Ubuntu 20.04.6下载、安装

一、下载 下载地址:https://cn.ubuntu.com/download 下载版本:ubuntu-20.04.6-desktop-amd64.iso 二、安装 参考博客: https://blog.csdn.net/lhl_blog/article/details/123406322 https://www.cnblogs.com/fieldtianye/p/17879840.html…

根据当年节假日和非工作时间计算请假时间-获取每个月的节假日,计算每个月的工作日时间进度,节假日每年更新

根据需求请假时间要排除法定节假日和非工作时间 1.获取当年的节假日 节假日是每年更新的,没有固定接口,需要手动录入 个人根据官方的节假日整理了当年的所有节假日,可以根据个人需求进行修改 // 获取每个月的节假日,如果当月没…

【Qt 学习笔记】Qt常用控件 | 显示类控件 | LCD Number的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件 | LCD Number的使用及说明 文章编号&#xf…

ELK技术介绍:背景、功能及应用场景全面解析

一、ELK概述 ELK是由Elasticsearch、Logstash和Kibana三个开源软件组成的日志管理解决方案,这一组合在近年来得到了广泛的关注和应用。ELK的出现,源于大数据和云计算技术的快速发展,以及对高效日志管理的迫切需求。 随着企业信息化程度…

3dmax云渲染100插件怎么安装?渲染100邀请码1a12

3dmax云渲染插件能在设计师完成参数设置后, 通过点击插件的方式上传到云渲染平台进行渲染,那么3dmax云渲染插件怎么安装呢?以渲染100为例,我们来看下。 下载工具:渲染100客户端 1、设计师在渲染100官网(http://www.x…

淘宝扭蛋机小程序开发:开启购物新纪元,探索乐趣无穷的互动体验

随着科技的飞速发展,人们的购物方式也在不断革新。淘宝扭蛋机小程序应运而生,它巧妙地结合了线上购物与线下娱乐,为消费者带来了一种前所未有的互动体验。今天,就让我们一起走进淘宝扭蛋机小程序的开发世界,探索其背后…

DHCP原理和配置

1、DHCP原理 (1)什么是DHCP DHCP(Dynamic HostConfiguration Protocol,动态主机配置协议):给网络内的客户机自动分配IP地址由internet工作任务小组设计开发口专门用于为TCP/IP网络中的计算机自动分配TCP/IP参数的协议DHCP采用的是UDP作为传输…

【数字图像处理笔记】Matlab实现离散傅立叶变换 (二)

💌 所属专栏:【数字图像处理笔记】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#x…

离线语音模块初步学习——LSYT201B(深圳雷龙发展)

一 、产品简介 首先简单介绍下该离线语音模块,官方给出的介绍是:YT2228 是根据智能语音交互市场需求及思必驰算法的发展方向定义开发的 “芯片算法”人工智能人机语音交互解决方案,具有高性能、低功耗等特点。该芯片通过软硬融合的方法&…

流量代理第一弹:入门使用

定义 “流量代理是一种网络通信技术,它充当网络通信的中间人,将流量从一个地方传递到另一个地方。通常用于实现网络隧道、网络加速、访问控制和隐私保护等功能。“ 上面是来自chatGPT的回答。从这个回答中,我们不难看出,流量代理…

专利视角下的量子竞赛:《2024全球专利格局白皮书》

2024年1月,欧洲量子产业联盟(QuIC)发布了题为《全球量子技术专利格局描述》的综合白皮书。 该文件以透明的视角展示了当今的知识产权格局,包括知识产权持有人的地理分布。该文件由 QuIC 知识产权(IP)与贸易…

【学习笔记】Python 使用 matplotlib 画图

文章目录 安装中文显示折线图、点线图柱状图、堆积柱状图坐标轴断点参考资料 本文将介绍如何使用 Python 的 matplotlib 库画图,记录一些常用的画图 demo 代码 安装 # 建议先切换到虚拟环境中 pip install matplotlib中文显示 新版的 matplotlib 已经支持字体回退…

Linux Docker下载镜像更改默认存储位置/usr/lib/docker

用于解决docker默认存储位置磁盘空间不足,切换存储位置 1、执行下面命令查看 现在docker的存储位置 docker info | grep "Docker Root Dir" 1.2、如果之前已经下载过镜像可以用mv命令把原来的镜像复制到新的地址 mv /var/lib/docker /data/docker 2、…

vue3中的ref、isRef、shallowRef、triggerRef和customRef

1.ref 接受一个参数值并返回一个响应式且可改变的 ref 对象。 ref 对象拥有一个指向内部值的单一属性 .value property &#xff0c;指向内部值。 例&#xff1a;此时&#xff0c;页面上的 str1 也跟着变化 <template><div><button click"handleClick&quo…

RK3588构建ubuntu22.04根文件系统

前言 RK系列的平台提供了buildroot和debian的系统&#xff0c;使用脚本可以直接构建出来&#xff0c;但是没有提供ubuntu的系统&#xff0c;很多厂商只提供一个rootfs.img的固件包&#xff0c;没有将方法开源出来。本文实现了从ubuntu官网开始构建一个ubuntu22.04根文件系统。…