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

mongodb:增删改查和特殊查询符号手册

前言

        最近考虑开发游戏,网上推荐使用非关系数据库mongodb,因此浅尝了一番,并将一些语句和符号记录在这里。

        相对于mysql、oracle这些关系型数据库,基于json文档的mongodb在很多地方都与之大不相同(可以类比为TCP握手连接、和UDP无连接这样的差异),开始学的时候,挺难转变固有设计思路的。

增删改查

1. 创建(Create)

在 MongoDB 中,创建操作通常指插入文档到集合中。

插入单个文档
db.collectionName.insertOne({field1: value1,field2: value2,// ...
});
插入多个文档
db.collectionName.insertMany([{ field1: value1, field2: value2 },{ field1: value3, field2: value4 },// ...
]);

2. 读取(Read)

读取操作是指从集合中检索文档。

查询所有文档
db.collectionName.find({});
查询特定条件的文档
db.collectionName.find({ field1: value1 });
查询并返回特定字段
db.collectionName.find({ field1: value1 }, { field2: 1, _id: 0 }); // 只返回 field2 字段,不返回 _id 字段

3. 更新(Update)

更新操作是指修改集合中的文档。

更新单个文档
db.collectionName.updateOne({ field1: value1 }, // 查询条件{ $set: { field2: newValue2 } } // 更新操作
);
更新多个文档
db.collectionName.updateMany({ field1: value1 }, // 查询条件{ $set: { field2: newValue2 } } // 更新操作
);

4. 删除(Delete)

删除操作是指从集合中移除文档。

删除单个文档
db.collectionName.deleteOne({ field1: value1 });
删除多个文档
db.collectionName.deleteMany({ field1: value1 });

复杂的查询 

1. 常用操作

计数文档
db.collectionName.countDocuments({ field1: value1 });
排序文档
db.collectionName.find({}).sort({ field1: 1 }); // 升序排序
db.collectionName.find({}).sort({ field1: -1 }); // 降序排序
分页查询
db.collectionName.find({}).skip(10).limit(5); // 跳过前10个文档,返回接下来的5个文档
根据id查询 
db.collectionName.find({ _id: ObjectId("671db3ea81470184298c3d44") });
聚合查询
//查询某辆车某种成色的情况
db.global_item.aggregate([{$match: {car_type: "SUV"}},{$unwind: "$car_fine"},{$match: {"car_fine.fine": "饱经摧残"}},{$project: {_id: 1,desc: "$car_fine.desc",fine: "$car_fine.fine",mile_fix: "$car_fine.mile_fix",person_fix: "$car_fine.person_fix",refit: "$car_fine.refit",speed_fix: "$car_fine.speed_fix",weight_fix: "$car_fine.weight_fix"}}
])
解释
  1. $match

    • 第一个 $match 阶段过滤出 car_type 为 "SUV" 的文档。
  2. $unwind

    • $unwind 展开 car_fine 数组,每个元素都会生成一个新的文档。
  3. $match

    • 第二个 $match 阶段过滤出 car_fine.fine 字段为 "饱经摧残" 的文档。
  4. $project

    • $project 阶段只返回你需要的字段,并重新命名这些字段以符合你的输出格式。

 

复杂查询操作符 

1. 逻辑操作符
  • $and:匹配所有给定条件
  • $or:匹配任意一个给定条件
  • $not:对条件取反
  • $nor:不匹配所有给定条件
示例:
// 使用 $and 操作符,匹配 field1 = value1 且 field2 = value2 的文档
db.collectionName.find({$and: [{ field1: value1 },{ field2: value2 }]
});// 使用 $or 操作符,匹配 field1 = value1 或 field2 = value2 的文档
db.collectionName.find({$or: [{ field1: value1 },{ field2: value2 }]
});// 使用 $not 操作符,匹配 field1 不等于 value1 的文档
db.collectionName.find({field1: { $not: { $eq: value1 } }
});// 使用 $nor 操作符,不匹配 field1 = value1 且 field2 = value2 的文档
db.collectionName.find({$nor: [{ field1: value1 },{ field2: value2 }]
});

2. 比较操作符
  • $eq:等于
  • $ne:不等于
  • $gt:大于
  • $gte:大于等于
  • $lt:小于
  • $lte:小于等于
  • $in:在数组中的值
  • $nin:不在数组中的值
示例:
// 查找 field1 等于 value1 的文档
db.collectionName.find({ field1: { $eq: value1 } });// 查找 field1 不等于 value1 的文档
db.collectionName.find({ field1: { $ne: value1 } });// 查找 field2 大于 value2 的文档
db.collectionName.find({ field2: { $gt: value2 } });// 查找 field2 大于等于 value2 的文档
db.collectionName.find({ field2: { $gte: value2 } });// 查找 field2 小于 value2 的文档
db.collectionName.find({ field2: { $lt: value2 } });// 查找 field2 小于等于 value2 的文档
db.collectionName.find({ field2: { $lte: value2 } });// 查找 field1 的值在 [value1, value2, value3] 数组中的文档
db.collectionName.find({ field1: { $in: [value1, value2, value3] } });// 查找 field1 的值不在 [value1, value2, value3] 数组中的文档
db.collectionName.find({ field1: { $nin: [value1, value2, value3] } });

3. 元素操作符
  • $exists:判断字段是否存在
  • $type:判断字段类型
示例:
// 查找包含 field1 字段的文档(无论 field1 的值是什么)
db.collectionName.find({ field1: { $exists: true } });// 查找不包含 field1 字段的文档
db.collectionName.find({ field1: { $exists: false } });// 查找 field1 的类型为指定类型的文档(MongoDB类型编号或名称)
db.collectionName.find({ field1: { $type: "string" } }); // 或者使用类型编号,如 $type: 2

4. 数组操作符
  • $all:匹配数组中所有元素
  • $elemMatch:匹配数组中的嵌套文档或特定条件
  • $size:匹配数组长度
示例:
// 查找数组字段 fieldArray 包含所有指定元素的文档
db.collectionName.find({ fieldArray:

        看着都头疼 

相关文章:

mongodb:增删改查和特殊查询符号手册

前言 最近考虑开发游戏,网上推荐使用非关系数据库mongodb,因此浅尝了一番,并将一些语句和符号记录在这里。 相对于mysql、oracle这些关系型数据库,基于json文档的mongodb在很多地方都与之大不相同(可以类比为TCP握手连…...

你的Mac book多久没有清洁键盘屏幕了,Mac清洁好帮手来了

你的Mac book键盘使用时间长了不会打油吗,你的屏幕使用久了不会沾灰吗,那你还不清洁一下 你不清洁的原因,是怕清洁键盘误触发吗,还是怕屏幕擦不干净白擦,还是觉得每次都要睡眠或关机再清洁很麻烦 Cleaner是Mac的清洁…...

ANA基因组数据库(ANAgdb)

ANA进化阶由早期发育的被子植物谱系组成,包括无油樟目(Amborellales)、睡莲目(Nymphaeales)和木兰藤目(Austrobaileyales),在进化上具有重要地位。 ANA基因组数据库(ANA…...

leetcode 704 二分查找

704. 二分查找 已解答 简单 相关标签 相关企业 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示例 1: 输入: nu…...

Vue学习笔记(十一)

一. Promise 1. 异步 异步:则是将耗时很长的A交付的工作交给系统之后,就去继续做B交付的工作,等到系统完成了前面的工作之后,再通过回调或者事件,继续做A剩下的工作。AB工作的完成顺序,和交付他们的时间顺…...

ABAP进阶学习1:动态内表1-通过系统表LVC_T_FCAT类型定义内表

动态内表1-通过系统表LVC_T_FCAT类型定义内表 如果对你有帮助,点个关注收藏吧~ 做BW做久了,突然对abap有了探索欲,开始进一步学习abap了,以后这个系列会逐步更新,欢迎小伙伴点个关注一起学习,我学习的方法…...

【Vispy库】一个用于高性能交互式2D/3D数据可视化库 Python库

Vispy库 1、你好,Vispy!2、安装Vispy,轻松上手3、案例一:绘制简单的2D图形4、案例二:3D图形的绘制5、案例三:大规模数据的可视化6、结语 1、你好,Vispy! Vispy是一个用于Python的高…...

为什么 C 语言数组是从 0 开始计数的?

C 语言等大多数编程语言的数组从 0 开始而不从 1 开始,有两个原因: 第一:地址计算更方便 C 语言从 0 开始的话,array[i] 的地址就正好是: (array i) 如果是从 1 开始的话,就是 (array i - 1) 多一次计…...

matlab线性度计算程序

matlab线性度计算程序 环境 matlab2023a ads2020 原理 其中f(v)是曲线,fmax是f(v)的最大值,fmin是f(v)的最小值,vmax为fmax对应v值,vmin为fmin对应v值。 L∆fmax/(fmax-fmin) (1) ∆fmaxmax⁡[f(v)-[fmin-K*(v-vmin)]] (2) K(…...

为什么NMOS管比PMOS管更受欢迎?

NMOS在实际应用中为何比PMOS要更受欢迎。本文将从导电沟道、电子迁移率和器件速度等多个方面来展开讲解。 首先是在性能方面考虑: 与NMOS管驱动能力相同的一个PMOS管,其器件面积可能是NMOS管的2~3倍,然而器件面积会影响导通电阻…...

【论文复现】短期电力负荷

作者主页: 七七的个人主页 文章收录专栏: 论文复现 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 短期电力负荷 论文发表问题背景一. 基本问题二. 本论文发现的问题 对于论文发现问题的解决方案:复现…...

pytest脚本常用的执行命令

pytest脚本常用的执行命令 一、一般执行的脚本,执行.py文件整个脚本二、执行.py文件脚本中的一个模块三、执行脚本,执行.py文件整个脚本,或则一个模块,查看对应的日志信息3.1.py文件执行allure的脚本3.2去dos框下去执行对应的脚本…...

OpenCv入门

一.OpenCv简介 1 图像的起源 1.1图像是什么? 图:是物体反射或透射光的分布 像:是人的视觉系统所接受的图在人脑中所形版的印象或认识 1.2模拟图像和数字图像 模拟图像:连续存储的图像 数字图像:分级存储的图像 2 数字…...

超详细的flex教程(面试必考)

引言 为什么存在? Flex 布局的出现是为了解决传统 CSS 布局方式(如浮动布局、定位布局等)在处理复杂布局时的诸多限制和不便。 优势 1. 简化布局 Flex 布局的语法简洁明了,代码更易读。 2. 强大的对齐能力 提供丰富的对齐属…...

C++的输入与输出

一.格式和注意要点 1. #include<iostream>; using namespace std; 标准库定义了4个IO对象&#xff0c;IO(输入输出)&#xff0c;以下&#xff1a; cin是一个istream流对象&#xff0c;现在理解为标准输入即可。cout是一个ostream流对象&#xff0c;理解为标准输出即可。…...

上海剧某文化传播有限公司与喜某(上海)网络科技有限公司、上海喜某科技有限公司侵害著作权及不正当竞争纠纷案

上海剧某文化传播有限公司与喜某&#xff08;上海&#xff09;网络科技有限公司、上海喜某科技有限公司侵害著作权及不正当竞争纠纷案的详细情况如下&#xff1a; 基本案情&#xff1a; 上海剧某文化传播有限公司&#xff08;以下简称剧某公司&#xff09;是电视剧《宸汐缘》的…...

【c++篇】:模拟实现string类--探索字符串操作的底层逻辑

✨感谢您阅读本篇文章&#xff0c;文章内容是个人学习笔记的整理&#xff0c;如果哪里有误的话还请您指正噢✨ ✨ 个人主页&#xff1a;余辉zmh–CSDN博客 ✨文章所属专栏&#xff1a;c篇–CSDN博客 文章目录 前言一.string类的默认成员函数以及深拷贝1.基本框架2.默认成员函数…...

springboot配置logback.xml遇到的几个问题

最近项目用到对日志脱敏&#xff0c;经过研究通过logback实现了对日志脱敏&#xff0c;上篇文章中详细讲解了如果配置。但是还是对logback的配置不太了解。比如springboot怎么加载这个logback.xml的。 首先&#xff0c;默认情况下&#xff0c;logback.xml文件是放在类目录下&am…...

MySQL 5.7与MySQL 8.0对比

一、功能对比 JSON支持 MySQL 5.7&#xff1a;引入了JSON数据类型&#xff0c;允许用户存储和操作JSON格式的数据&#xff0c;这是NoSQL功能的一个重要补充。但相对于MySQL 8.0&#xff0c;其功能和性能较弱。MySQL 8.0&#xff1a;在JSON支持方面进行了重大改进&#xff0c;引…...

【代码随想录Day55】图论Part07

prim 算法精讲 题目链接/文章讲解&#xff1a;代码随想录 import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);// 读取顶点数和边数int vertexCount scanner.nextInt();int edgeCount scanner.nextI…...

软考在即!这些注意事项你提前了解!

11月软考马上就要开始了&#xff0c;但是&#xff0c;还有很多的考生&#xff0c;可能还不知道自己到底应该去了解些什么&#xff1f;本文将详细介绍机考注意事项及系统操作提示&#xff0c;帮助考生们备考无忧。 一、考试入场要求和考场规则 1、入场时间&#xff1a;考生需提…...

CMake知识点

参考&#xff1a; https://zhuanlan.zhihu.com/p/661284252 cmake使用教程&#xff08;实操版&#xff09;-CSDN博客 【CMake】CMake从入门到实战系列&#xff08;二&#xff09;——实例入手&#xff0c;讲解CMake的基本流程_cmake创建一个可执行目标的过程-CSDN博客 一、…...

git ls-remote

文章目录 1.简介2.格式3.选项4.示例5.小结参考文献 1.简介 git ls-remote 是一个 Git 命令&#xff0c;用于列出远程 Git 仓库的引用&#xff08;refs&#xff09;&#xff0c;包括分支、标签等。 这个命令非常有用&#xff0c;可以帮助你查看远程仓库中可用的分支和标签&…...

低代码平台如何通过AI赋能,实现更智能的业务自动化?

引言 随着数字化转型的加速推进&#xff0c;企业在日常运营中面临的业务复杂性与日俱增。如何快速响应市场需求&#xff0c;优化流程&#xff0c;并降低开发成本&#xff0c;成为各行业共同关注的核心问题。低代码平台作为一种能够快速构建应用程序的工具&#xff0c;因其可视化…...

计算疫情扩散时间

该专栏题目包含两部分&#xff1a; 100 分值部分题目 200 分值部分题目 所有题目都会陆续更新&#xff0c;订阅防丢失 题目描述 在一个地图中(地图由 N ∗ N N*N N∗N 个区域组成)&#xff0c;有部分区域被感染病菌。 感染区域每天都会把周围(上下左右)的4个区域感染。 请…...

【Windows11】24H2 内存占用高(截至10月31日)

文章目录 一、问题二、解决三、原因 一、问题 系统版本&#xff1a; 内存只有32GB。 以前只有我在运行数据处理程序的时候内存占用才会很高&#xff0c;日常情况下应该只有40%、50%左右的。 但是24H2&#xff0c;日常情况下内存占用80%以上。 而我只开了很少的应用&#…...

题目:多个字符从两端移动,向中间汇聚

【多个字符从两端移动&#xff0c;向中间汇聚】 char arr1[] "Good Good Study,Day Day Up!" ; char arr2[] "***************************"; 【思路】 首先两字符串中的元素个数要相同&#xff0c;将两串字符分别存放在数组中&#xff0c;那么字符串中…...

前端如何安全存储密钥,防止信息泄露

场景 把公钥硬编码在前端代码文件里&#xff0c;被公司安全检测到了要整改&#xff0c;于是整理几种常见的前端密钥存储方案。 1. 设置环境变量再读取 在打包或部署前端应用时&#xff0c;可以将密钥配置为环境变量&#xff0c;在应用运行时通过环境变量读取密钥。这样可以将密…...

银行电子户分账解决电商行业哪些问题

随着电子商务的快速发展&#xff0c;电商银行电子户分账作为金融科技领域的重要一环&#xff0c;逐渐成为现代金融业务的核心。本文将详细探讨电商银行电子户分账的原理、操作流程、安全措施以及在电子商务中的重要作用。 二、电商银行电子户分账的基本概念 电商银行电子户分…...

Web音乐库:SpringBoot实现的音乐网站

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常…...