当前位置: 首页 > 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…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化

iOS 应用的发布流程一直是开发链路中最“苹果味”的环节&#xff1a;强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说&#xff0c;这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发&#xff08;例如 Flutter、React Na…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...