MongoDB基本语法

news/2024/9/18 13:25:00/ 标签: mongodb, 数据库

MongoDB 基本语法详解

MongoDB 是一种面向文档的 NoSQL 数据库,支持灵活的数据结构和高扩展性,广泛应用于现代应用程序开发。MongoDB 采用 BSON(Binary JSON)格式存储数据,使得其能够存储复杂嵌套的结构。

1. 数据库和集合操作

MongoDB 中的数据库和集合类似于关系型数据库中的数据库和表。每个 MongoDB 实例可以包含多个数据库,每个数据库包含多个集合(collection)。集合中存储的是 BSON 格式的文档。

1.1 创建/切换数据库

use myDatabase

该命令会创建一个名为 myDatabase数据库(如果不存在),并切换到该数据库

1.2 查看当前数据库

db

使用 db 命令可以显示当前连接的数据库名称。

1.3 查看所有数据库

show dbs

该命令用于显示 MongoDB 实例中的所有数据库

1.4 删除数据库

db.dropDatabase()

该命令会删除当前连接的数据库及其所有数据。

2. 集合操作

2.1 创建集合

db.createCollection("myCollection")

手动创建一个名为 myCollection 的集合。MongoDB 是动态模式(schema-less)的,所以即使不显式创建集合,在插入数据时 MongoDB 也会自动创建。

2.2 查看集合

show collections

查看当前数据库中的所有集合。

2.3 删除集合

db.myCollection.drop()

删除名为 myCollection 的集合及其中的所有文档。

3. 文档的 CRUD 操作

文档是 MongoDB 中的基本数据单元,它以 BSON 格式存储,类似于 JSON 对象。接下来我们将详细介绍文档的增删改查操作。

3.1 插入文档

MongoDB 提供了三种插入文档的方式:insertOne()insertMany()insert()

3.1.1 插入单个文档
db.myCollection.insertOne({name: "John Doe",age: 30,address: { city: "New York", zip: "10001" }
})

该命令在集合 myCollection 中插入一条文档。

3.1.2 插入多个文档
db.myCollection.insertMany([{ name: "Alice", age: 25 },{ name: "Bob", age: 28 }
])

insertMany() 用于一次插入多条文档。

3.1.3 插入数据自动创建集合

即使集合不存在,执行插入操作时 MongoDB 会自动创建集合。

3.2 查询文档

MongoDB 支持强大的查询功能,可以根据条件筛选出符合要求的文档。

3.2.1 查询所有文档
db.myCollection.find()

该命令返回集合中的所有文档。

3.2.2 条件查询
db.myCollection.find({ age: { $gt: 25 } })

find() 函数可以传入查询条件,这里 { $gt: 25 } 表示查找 age 字段大于 25 的文档。

3.2.3 限制返回字段
db.myCollection.find({ age: { $gt: 25 } }, { name: 1, _id: 0 })

该命令查询 age 大于 25 的文档,并只返回 name 字段,_id 字段不返回。

3.2.4 查询单个文档
db.myCollection.findOne({ name: "Alice" })

该命令返回第一个符合条件的文档。

3.2.5 查询结果排序
db.myCollection.find().sort({ age: -1 })

该命令按 age 字段降序排列结果。

3.2.6 查询结果分页
db.myCollection.find().limit(5).skip(10)

该命令返回查询结果中的第 11 到第 15 条文档,适用于分页功能。

3.3 更新文档

MongoDB 提供 updateOne()updateMany()replaceOne() 来更新文档。

3.3.1 更新单个文档
db.myCollection.updateOne({ name: "Alice" },{ $set: { age: 26 } }
)

该命令更新 nameAlice 的文档,将其 age 字段更新为 26。

3.3.2 更新多个文档
db.myCollection.updateMany({ age: { $lt: 30 } },{ $set: { status: "young" } }
)

该命令将所有 age 小于 30 的文档的 status 字段设置为 young

3.3.3 替换文档
db.myCollection.replaceOne({ name: "Bob" },{ name: "Robert", age: 35 }
)

replaceOne() 替换整个文档,而不仅仅是更新部分字段。

3.4 删除文档

3.4.1 删除单个文档
db.myCollection.deleteOne({ name: "John Doe" })

该命令删除 nameJohn Doe 的文档。

3.4.2 删除多个文档
db.myCollection.deleteMany({ age: { $gt: 30 } })

该命令删除所有 age 大于 30 的文档。

4. 索引操作

MongoDB 支持在字段上创建索引以加快查询速度,类似于关系型数据库中的索引。

4.1 创建单字段索引

db.myCollection.createIndex({ name: 1 })

该命令为 name 字段创建升序索引。

4.2 创建复合索引

db.myCollection.createIndex({ name: 1, age: -1 })

该命令为 nameage 字段创建复合索引,name 字段升序,age 字段降序。

4.3 查看集合索引

db.myCollection.getIndexes()

该命令查看集合中的所有索引。

4.4 删除索引

db.myCollection.dropIndex("name_1")

该命令删除名为 name_1 的索引。

5. 聚合操作

MongoDB 提供了功能强大的聚合框架,允许在查询过程中进行数据处理和转换。

5.1 聚合管道

db.myCollection.aggregate([{ $match: { age: { $gte: 25 } } },{ $group: { _id: "$status", avgAge: { $avg: "$age" } } }
])

该命令首先筛选出 age 大于等于 25 的文档,然后按照 status 字段分组并计算每组的平均年龄。

5.2 聚合阶段常用操作

  • $match:过滤数据,类似于 find()
  • $group:按某个字段分组并计算聚合值。
  • $project:选择和重命名返回的字段。
  • $sort:对结果进行排序。

6. 常用运算符

MongoDB 提供了一些常用的查询和更新运算符,用于处理各种复杂的查询和数据操作。

6.1 查询运算符

  • $gt:大于
  • $lt:小于
  • $gte:大于等于
  • $lte:小于等于
  • $ne:不等于
  • $in:包含于数组
  • $nin:不包含于数组
  • $exists:字段是否存在

6.2 更新运算符

  • $set:设置字段值
  • $inc:增加字段值
  • $unset:删除字段
  • $push:向数组字段追加元素
  • $pull:从数组字段删除元素

7. 安全与权限

MongoDB 支持用户认证和角色管理,可以根据角色对数据库进行权限控制。

7.1 创建用户

db.createUser({user: "myUser",pwd: "password",roles: [ { role: "readWrite", db: "myDatabase" } ]
})

该命令创建一个 myUser 用户,并赋予其对 `myDatabase

` 的读写权限。

7.2 删除用户

db.dropUser("myUser")

删除名为 myUser 的用户。

结论

本文详细介绍了 MongoDB 的基本语法,从数据库和集合的操作,到文档的 CRUD、索引、聚合,以及常见的查询和更新运算符。MongoDB 具有极大的扩展性和灵活性,适合现代 Web 应用程序开发中的大规模数据处理场景。


http://www.ppmy.cn/news/1524761.html

相关文章

大数据安全之Kerberos

Kerberos 是一个网络身份验证协议,旨在提供强身份验证,尤其是在开放网络环境中。它最早由麻省理工学院(MIT)开发,用于在不安全的网络环境中安全地验证用户身份。Kerberos 协议的设计旨在防止窃听、重放攻击和网络中的其…

2024年9月12日(k8s环境及测试 常用命令)

一、环境准备及测试 1、报错处理: kube-system calico-node-5wvln 0/1 Init:0/3 0 16h kube-system calico-node-d7xfb 0/1 Init:0/3 0 16h ku…

mysql学习教程,从入门到精通,SQL AND OR 运算符(12)

1、SQL AND & OR 运算符 在本教程中,您将学习如何在子句中使用ASELECT column1_name, column2_name, columnN_nameFROM table_nameWHERE condition1 AND condition2;ND&OR运算符,WHERE以根据多个条件过滤记录。 1.1、根据条件选择记录 …

专注LabVIEW 做好一件事

在一次LabVIEW的系统改造项目中,遇到一个设备,操作手册居然还是基于DOS系统的。不难看出,这套设备虽然年代久远,但背后的技术积淀极为深厚。事实证明,这套系统在业内享有很高的认可度,由国外团队开发&#…

asio中的异步accept分析

简介 主要分析linux平台下的&#xff0c;即reactive_socket_service_base和reactive_socket_service 发起 由basic_socket_acceptor调用async_accept&#xff0c;前提是需要调用open创建socket添加到reactor中。其定义为 template <typename SocketService, typename Ac…

高级 ECharts 技巧:自定义图表主题与样式

ECharts 是一个强大的数据可视化库&#xff0c;提供了多种内置主题和样式&#xff0c;但你也可以根据项目的设计需求&#xff0c;自定义图表的主题与样式。本文将介绍如何使用 ECharts 自定义图表主题&#xff0c;以提升数据可视化的吸引力和一致性。 1. 什么是 ECharts 主题&…

开源免费的工贸一体行业ERP管理系统

引言 在当今数字化浪潮汹涌澎湃的时代&#xff0c;中小企业面临着前所未有的挑战与机遇。如何实现数字化转型发展&#xff0c;成为了众多中小企业主心头的大事。 据相关数据显示&#xff0c;目前我国中小企业数量已经超过了 4000 万户&#xff0c;然而成功实现数字化转型的比例…

B2064 斐波那契数列

题目描述 斐波那契数列是指这样的数列&#xff1a;数列的第一个和第二个数都为 11&#xff0c;接下来每个数都等于前面 22 个数之和。 给出一个正整数 aa&#xff0c;要求斐波那契数列中第 aa 个数是多少。 输入格式 第 11 行是测试数据的组数 nn&#xff0c;后面跟着 nn 行…

C++20 协程:异步编程的新纪元

C20 引入了协程&#xff08;coroutines&#xff09;&#xff0c;这是一种全新的异步编程模型&#xff0c;使得编写异步代码变得更加简洁和直观。本文将详细介绍 C20 协程的概念、功能演变及其在实际项目中的应用。通过本文&#xff0c;你将了解到协程的基本原理、语法和如何利用…

阿里巴巴1688中国站商品搜索API返回值深度解析与实战应用

在电商数据分析和市场调研中&#xff0c;阿里巴巴中国站&#xff08;现常指1688.com&#xff09;的商品搜索API扮演着至关重要的角色。这些API提供了丰富的商品信息&#xff0c;为商家和开发者在商品定价、营销策略制定、市场调研等方面提供了强有力的数据支持。本文将深入探讨…

有关WSL和docker的介绍

目录标题 如何利用在windows上配置docker实现linux和windows容器修改WSL默认安装&#xff08;也就是linux子系统&#xff09;目录到其他盘 如何利用在windows上配置docker实现linux和windows容器 wsl的基本命令&#xff1a;参考网页 docker入门到实践&#xff1a;参考网页 官方…

PDF扫描版文字识别OCR

PDF扫描版文字识别OCR 最近需要有对PDF扫描版进行文字可识别的需求&#xff0c;这里介绍一款工具挺好用的 这是一款开源的OCR工具 github地址 https://github.com/hiroi-sora/Umi-OCR 主要功能及特点 免费&#xff1a;本项目所有代码开源&#xff0c;完全免费。方便&#…

前端封装组件可视化库

在 Vue 项目中&#xff0c;如果你希望封装的组件库能够可视化并调整默认参数&#xff0c;你可以考虑使用以下工具和库&#xff1a; Storybook: Storybook 是一个非常流行的工具&#xff0c;用于构建和展示 UI 组件。它允许你以独立的方式开发组件&#xff0c;并能够直观地调整组…

发送成绩的app或小程序推荐

老师们&#xff0c;新学期的第一次月考马上开始&#xff0c;是不是还在为如何高效、便捷地发布成绩而头疼呢&#xff1f;别担心&#xff0c;都2024年了&#xff0c;我们有更智能的方式来解决这个问题&#xff01; 给大家安利一个超级实用的工具——易查分小程序。这个小程序简…

数据结构之数组矩阵存储

目录 一、数组存储 1. 一维数组 2. 二维数组 二、特殊矩阵存储 1. 对称矩阵 2. 三角矩阵 3. 三对角矩阵 三、总结 一、数组存储 1. 一维数组 2. 二维数组 二维数组按列优先存储的下标对应关系&#xff08;A _m*_n&#xff09; 二、特殊矩阵存储 1. 对称矩阵 上、下三…

MySQL--库的操作

文章目录 1.创建数据库2.创建数据库案例3.字符集和校验规则3.1默认字符集3.2默认校验规则3.3查看系统默认字符集以及校验规则3.4查看数据库支持的字符3.5查看数据库支持的字符集校验规则3.6校验规则对数据库的影响不区分大小写查询&#xff1a;排序结果&#xff1a;区分大小写查…

HTML5( HTML5 、CSS3) 第一天

HTML5 第一天 HTML5 第一天一、什么是 HTML5二、HTML5 新增标签三、多媒体音频标签四、多媒体视频标签五、新增 input 标签六、新增表单属性七、CSS3 新特性八、CSS3 属性选择器九、结构伪类选择器十、nth-child 参数详解十一、nth-child 和 nt-of-type 的区别十二、伪元素选…

苹果账号登录后端验证两种方式 python2

import time import jwt import requests import json import base64def decode_jwt(jwt_token):try:h,p,s jwt_token.split(.)except:return {},{},{},"","",""header json.loads(base64.urlsafe_b64decode(h )) # 可能需要调整填充pa…

Golang | Leetcode Golang题解之第401题二进制手表

题目&#xff1a; 题解&#xff1a; func readBinaryWatch(turnedOn int) (ans []string) {for i : 0; i < 1024; i {h, m : i>>6, i&63 // 用位运算取出高 4 位和低 6 位if h < 12 && m < 60 && bits.OnesCount(uint(i)) turnedOn {ans …

LabVIEW中EPICS客户端/服务端的测试

概念 EPICS利用基于TCP/IP的信道接入&#xff08;CA&#xff09;网络协议。信道接入协议是建立在TCP/IP之上的应用层。 EPICS是客户端/服务器架构。通道访问服务器&#xff08;CA服务器&#xff09;可以通过使用输入/输出控制器&#xff08;IOC&#xff09;充当现实世界的I/O…