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

Mongodb UPDATE, 使用$position指定向数组中插入新元素的位置

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第72篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关注威赞。谢谢。

本篇文章,我们聊聊在mongodb数组更新的操作符$position. mongodb提供$position操作符,满足了数组更新中在指定位置插入指定元素的需求。不过mongodb在使用这个操作符时也有一些限制。本文就针对$position的使用和限制做详细说明。

定义

$position操作符,指定了数组更新使用$push时,插入元素的位置 。当用户向数组元素插入数据,不指定位置时,默认将元素插入到数组结尾。$position操作符,一定要和$each操作符搭配使用,按照下面的形式。

{$push:  {<field>: {$each: [<value1>, <value2>, ...],$position: <num>}}
}

其中<num>指定了数组中的位置,从0开始的位置索引。当<num>为0或正数时,表示从数组第一个元素开始 。当<num>大于数组当前元素数量时,将新元素插入数组的最后一个元素之后。当<num>为负数时,表示从数组的最后一个元素开始向前指定某个位置。如, 当传入-1时,表示向最后一个元素前的位置插入新的指定元素。当$each参数包含多个元素时,$each参数数组中的最后一个元素,在指定位置前。如果<num>的绝对值大于操作数组的长度,则从数组最前面插入新的元素。

行为

  • 自mongodb5.0开始,UPDATE操作按照字段名称的字典顺序更新字段。当字段中包含数字时,按照数字顺序依次更新字段。当然,对一个文档的多个字段操作,是原子性的。

应用

向数组头部插入元素

创建students集合并插入数据

db.students.insertOne({_id: 1, scores: [100]})

构建数据更新语句,在scores数组元素100前插入50, 60, 70三个元素

db.students.updateOne({_id: 1},{$push: {scores: {$each: [50,60,70], $position:0}}}
)

查看更新结果

db.students.find()
[{"_id": 1,"scores": [50,60,70,100]}
]

在数组中间插入新元素

构建数据更新语句,向数组的第二个位置插入元素20, 30。

db.students.updateOne({_id: 1},{$push: {scores: {$each: [20, 30], $position: 2}}}
)

查看数据更新结果

[{"_id": 1,"scores": [50,60,20,30,70,100]}
]

使用负数索引向数组指定位置插入元素

构建数组更新语句,向数组中倒数第二个元素前插入元素 90, 80.

db.students.updateOne({_id: 1},{$push: {scores: {$each: [90, 80], $position: -2}}}
)

查询更新结果

[{"_id": 1,"scores": [50,60,20,30,90,80,70,100]}
]

相关文章:

Mongodb UPDATE, 使用$position指定向数组中插入新元素的位置

学习mongodb&#xff0c;体会mongodb的每一个使用细节&#xff0c;欢迎阅读威赞的文章。这是威赞发布的第72篇mongodb技术文章&#xff0c;欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题&#xff0c;欢迎在文章下面点个赞&#xff0c;或者关…...

【Kafka】Kafka Broker工作流程、节点服役与退役、副本、文件存储、高效读写数据-08

【Kafka】Kafka Broker工作流程、节点服役与退役、副本、文件存储、高效读写数据 1. Kafka Broker 工作流程1.1 Zookeeper 存储的 Kafka 信息1.2 Kafka Broker总体工作流程1.2.1 Controller介绍 1.3 Broker 重要参数 2. 节点服役与退役3. Kafka副本 1. Kafka Broker 工作流程 …...

如何恢复未格式化分区数据?看这里!

什么是未格式化分区&#xff1f; 未格式化或RAW文件系统的分区无法被Windows操作系统识别和挂载&#xff0c;因此&#xff0c;Windows会提示你进行格式化以创建新的文件系统。注意&#xff0c;不要进行格式化。通常&#xff0c;文件系统变为未格式化或RAW会出现以下常见错误消…...

通过“BOSS”精通比特币,深入认识私钥、账户和钱包

来源:币界原创 作者:636Marx 无论当今数字货币技术如何发展&#xff0c;认识区块链技术幕后的关键机制至关重要。无论您是新手还是经验丰富的数字货币从业者&#xff0c;掌握钱包地址、公钥和私钥的复杂性都有无可替代重要性。进入 BOSS Wallet&#xff0c;这是一款尖端的 Web…...

进程与线程的区别

进程&#xff08;Process&#xff09; 1&#xff1a;进程是操作系统分配资源的基本单位 2&#xff1a;每个进程都有自己独立的虚拟地址空间&#xff0c;虚拟地址空间映射真实物理地址 3&#xff1a;进程之间相互隔离&#xff0c;某一个进程的崩溃不会影响到其它进程 4&…...

【AI基础】第五步:纯天然保姆喂饭级-安装并运行chatglm3-6b

类似于 【AI基础】第三步&#xff1a;纯天然保姆喂饭级-安装并运行chatglm2-6b&#xff0c;有一些细节不一样。 此系列文章列表&#xff1a; 【AI基础】概览 【AI基础】第一步&#xff1a;安装python开发环境-windows篇_下载安装ai环境python 【AI基础】第一步&#xff1a;安装…...

【学习笔记】Elastic-Job和Quartz 实现企业级定时任务

Elastic-Job和Quartz 实现企业级定时任务 知识拆解框架整合Java高级玩法定时任务案例 第1章 课程介绍 课程的总体介绍&#xff0c;定时任务的应用场景和发展趋势&#xff0c;以及分布式走时任务的介绍 1-1、导学 1-2、为什么学习定时任务 1-3、定时任务技术发展趋势 1-4、主…...

舒适佩戴,享受沉浸式音乐体验,西圣AVA2耳机体验

平时不管是听音乐&#xff0c;还是打电话&#xff0c;戴上一副耳机都可以让我们获得更好的隐私性&#xff0c;并且在公共场所&#xff0c;比如办公室、车厢里&#xff0c;也可以获得属于自己的空间。现在市面上耳机的选择非常多&#xff0c;音质、续航和佩戴的舒适度是我们选择…...

c++学习-----内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 答案揭晓&#xff1a; 这里很多人会误认为*char2在常量区&#xff0c;这其实是错误的 因为&#xff1a; 首先在内存字符常量区分配一块内存空间放下”abcd\0”&#xff0c;然后在栈中分配一块连续的内存空间&#xff0c;…...

可视化数据科学平台在信贷领域应用系列七:自动机器学习(下篇)

在当今金融科技迅速发展的时代&#xff0c;自动机器学习&#xff08;AutoML&#xff09;逐步成为了信贷风控领域的重要工具。随着大数据和人工智能技术的进步以及信贷风险环境的快速变化&#xff0c;传统人工建模模式的时效性已经难以应对复杂多变的挑战。自动机器学习框架将数…...

OpenGL Super Bible 7th-Primitives, Pipelines, and Pixels图元、渲染管线与像素

简介 本文的原版为《OpenGL Super Bible 7th》,是同事给我的,翻译是原文+译文的形势。文章不属于机器直译,原因在于语言不存在一一对应的关系,我将尽可能的按照中国人看起来舒服的方式来翻译这些段子,如果段子让你感到身心愉悦,那还劳烦点个关注,追个更。如果我没有及时…...

SpringBoot3.0更新后,IDEA创建SpringBoot2.x项目

首先创建新项目 然后Next Type选图中对应的即可&#xff0c;先在这里选择JavaVersion为17&#xff0c;然后等会去修改这个jdk的版本&#xff0c;然后Next 在选择springboot版本时发现还是没有2.x的版本&#xff0c;继续选择一个没有后缀名的版本先&#xff0c;这里选择3.3.0,至…...

Linux开发讲课8--- linux的5种IO模型

一、这里IO是什么 操作系统为了保护自己&#xff0c;设计了用户态、内核态两个状态。应用程序一般工作在用户态&#xff0c;当调用一些底层操作的时候&#xff08;比如 IO 操作&#xff09;&#xff0c;就需要切换到内核态才可以进行 服务器从网络接收的大致流程如下&#xff1…...

什么是云主机?

云主机是新一代的主机租借服务&#xff0c;它整合了高性能服务器与优质网络带宽&#xff0c;有用处理了传统主机租借价格偏高、服务品良莠不齐等缺陷&#xff0c;可全面满意中小企业、个人站长用户对主机租借服务低本钱&#xff0c;高牢靠&#xff0c;易办理的需求。   关于大…...

力扣上的经典问题:接雨水

力扣上的经典问题&#xff1a;接雨水 在众多的编程题库中&#xff0c;力扣&#xff08;LeetCode&#xff09;是一个非常受欢迎的平台&#xff0c;拥有大量的算法和数据结构练习题。其中&#xff0c;接雨水&#xff08;Trapping Rain Water&#xff09;问题因其巧妙的思路和广泛…...

双例集合(二)——双例集合的实现类之HashMap容器类

双例集合的常用实现类有HashMap和TreeMap两个&#xff0c;通过这两个类我们可以实现Map接口定义的容器&#xff0c;一般情况下使用HashMap容器类较多。 HashMap容器类是Map接口最常用的实现类&#xff0c;它的底层采用Hash算法来实现&#xff0c;这也就满足了键key不能重复的要…...

oracle-定时器(job)

--1分钟运行一次定时任务。sysdate为了定时任务即可生效。 DECLARE JOB NUMBER; BEGIN DBMS_JOB.SUBMIT(JOB,P_HJZ_HJZ_PJ_DDYTKAPB_INIT_JOB;,SYSDATE,sysdate1/24/60); COMMIT; END; / select * from user_jobs; --删除 begin DBMS_JOB.broken (462, false); DBM…...

cron.timezone

系统 date 数据库 show timezone插件 show cron.timezonealter system set cron.timezonePRC;show cron.timezone...

Hadoop+Spark大数据技术(测试)

1、九九乘法表 在下面的单元格中编写Scala程序&#xff0c;输出上三角形的九九乘法表&#xff0c;并运行。 for (i <- 1 to 9 reverse) {for (j <- 1 to i) {print(s"$j x $i ${i * j}\t")}println() } 2、单词计数 在下面的若干单元格中编写Spark程序&#…...

使用新语法连接Qt 5中重载的信号和槽

在使用Qt 5中的新信号和槽连接语法&#xff08;使用成员函数指针&#xff09;时&#xff0c;我遇到了一些问题。根据新的信号槽语法的描述&#xff0c;我尝试将以下代码&#xff1a; QObject::connect(spinBox, SIGNAL(valueChanged(int)),slider, SLOT(setValue(int)));改为&…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表

1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...