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]}
]

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

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

相关文章

HTML 全局属性介绍及示例

HTML 全局属性是一组可以在任何HTML元素中使用的属性。这些属性提供了一种方式来定义元素的通用行为或外观。以下是一些常见的HTML全局属性及其示例。 id id 属性为元素提供了一个唯一的标识符。它不能在 <head>, <html>, <meta>, <script>, <sty…

vue2+echart 树状图节点密集,可滚动鼠标缩放, 尺寸根据节点调整

vue2echart 树状图节点密集&#xff0c;可滚动鼠标缩放&#xff0c; 尺寸根据节点调整 <template><div ref"chart" style"width: 100%; height: 600px;"></div> </template><script> import * as echarts from echarts;exp…

9.2.2 DeepLab系列模型中每一代的创新是什么?是为了解决什么问题?

9.2.2 DeepLab系列模型中每一代的创新是什么&#xff1f;是为了解决什么问题&#xff1f; 前情回顾&#xff1a;9.2.1 简述图像分割中经常用到的编码器-解码器网络结构的设计理念。 DeepLab是Google 团队提出的一系列图像分割算法。 DeepLab v1在2014年被提出&#xff0c;并在…

微信小程序接入lottie动画

1、注意&#xff1a;canvas渲染出来的层级太高&#xff0c;当有弹窗的情况会暴露在弹窗外 模拟器上会有这个问题&#xff0c;线上版本不会有 2、需求 需要把lottie动画在小程序的环境下进行展示 3、什么是lottie动画 由Airbnb开发并开源。允许设计师将复杂的矢量动画导出为…

李宏毅深度学习项目——HW1个人笔记

视频链接 PDF链接 googleColab链接 GoogleColab是一个免费的jupyter notebook&#xff0c;可以用上面的gpu资源进行训练 题目 通过前两天的数据&#xff0c;预测第三天某个人感染新冠的概率 范例 导包 # Numerical Operations import math import numpy as np# Reading/Wr…

欢迎莅临ARCHE-2024,共享智慧档案盛宴!

敬邀参观&#xff01;2024第三届上海国际智慧档案展览会&#xff08;ARCHE-2024&#xff09;将于2024年6月19-21日在上海跨国采购会展中心盛大开幕。深圳市铨顺宏科技有限公司将展示最新的智慧档案技术与解决方案&#xff0c;展位号H010-H011。期待您的光临&#xff0c;共同探索…

String类的默认实现

#pragma once #include <iostream> using namespace std; #include <assert.h>namespace yyqx//为了与库里面的string进行区分 {//仅仅实现一个简单的string&#xff0c;仅仅考虑资源管理深浅拷贝问题class string{public://构造函数string(const char* str):_size…

对比 Axios 和 Fetch:选择最适合的 HTTP 请求方法

在前端开发中&#xff0c;处理 HTTP 请求是一个常见且重要的任务。JavaScript 提供了多种方式来发送网络请求&#xff0c;其中最受欢迎的两种方式分别就是 Fetch API 和 Axios。尽管两者都能完成同样的任务&#xff0c;即从客户端向服务器发送请求并接收响应&#xff0c;但它们…

无线麦克风推荐哪些品牌?一文读懂家用无线麦克风哪个牌子好!

​在这个充满创意与表达的时代&#xff0c;无线领夹麦克风以其独特的魅力&#xff0c;成为了声音创作者们的得力助手。它小巧便携&#xff0c;功能强大&#xff0c;无论是日常拍摄、直播互动还是专业演出&#xff0c;都能轻松应对&#xff0c;让你的声音随时随地清晰传递。那么…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 04:对程序进行逐步跟踪

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

机器学习专题记录

有偏估计和无偏估计 无偏估计和有偏估计的区别 无偏估计 无偏估计是用样本统计量来估计总体参数时的一种无偏推断。估计量的数学期望等于被估计参数的真实值&#xff0c;则称此估计量为被估计参数的无偏估计&#xff0c;即具有无偏性&#xff0c;是一种用于评价估计量优良性的…

建筑工地通常那种考勤机好用?

建筑工地通常那种考勤机好用&#xff1f; 大量从乡村前往城市的务工者&#xff0c;所从事的多为建筑工程类行业&#xff0c;此种行业对学历与技能的要求不高&#xff0c;而工资水平倒也尚可&#xff0c;正因如此才吸引了众多劳动者。那要怎样管好工地上的项目呢&#xff1f;首要…

1999-2020年各地级市农村居民人均纯收入数据

1999-2020年各地级市农村居民人均纯收入数据 1、时间&#xff1a;1999-2020年 2、指标&#xff1a;年份、城市、农村居民人均纯收入 3、来源&#xff1a;区域年鉴、各省市年鉴 4、范围&#xff1a;地级市&#xff0c;具体每年城市数量参看下文图片&#xff0c;具体城市名单…

智能名片小程序源码系统 销售名片+企业商城 前后端分离+源代码包+搭建部署教程

系统概述 在当今数字化快速发展的时代&#xff0c;传统的商务交流方式逐渐显露出其局限性。为了满足企业和个人更加高效、便捷地展示和推广自身的需求&#xff0c;智能名片小程序源码系统应运而生。这一系统的开发旨在为用户提供一个集销售名片和企业商城于一体的综合性平台&a…

如何将图片转换为向量?(通过DashScope API调用)

本文介绍如何通过模型服务灵积DashScope将图片转换为向量&#xff0c;并入库至向量检索服务。DashVector中进行向量检索。&#xff0c;通过灵活、易用的模型API服务&#xff0c;让各种模态模型的能力&#xff0c;都能方便的为AI开发者所用。通过灵积API&#xff0c;开发者不仅可…

使用 Redis 生成分布式唯一ID

在分布式系统中&#xff0c;生成唯一ID是一个常见的需求。传统的数据库自增ID无法满足分布式系统的需求&#xff0c;因为多个节点可能同时生成ID&#xff0c;容易导致冲突。本文将介绍一种使用 Redis 实现分布式唯一ID的方法&#xff0c;并通过代码示例进行讲解。 一、背景介绍…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串分隔(二)(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串分隔(二)(100分) 🌍 评测功能需要订阅专栏后私信联系…

深入学习html的步骤

推荐的学习步骤&#xff1a; 1. 深入了解HTML基础标签 列表 HTML提供有序列表(<ol>)和无序列表(<ul>)。 <h2>无序列表</h2> <ul><li>项目一</li><li>项目二</li><li>项目三</li> </ul><h2>…

【ssl】启用http2时遇到的重重问题

【背景】 用pyping server传流式数据,必须启用http2,http2又必须有https支持。反复尝试,打破一个个err,最终成功。此篇记录一路上遇到的各类err和解决办法。 【问题和方案】 第一个警告:流式传输必须启用http2或http3(quic) 原本我是用http1.1启动的服务,所以有问题…

全面指南:2023年国内访问与下载GitHub的优化策略

本文汇总了2023年最新的国内访问和下载GitHub的多种优化方案&#xff0c;包括镜像访问、CDN加速、代理服务、浏览器插件、静态CDN、中转fork仓库、修改HOSTS文件等&#xff0c;旨在帮助开发者提升访问效率和下载速度。 文章目录 1. 引言2. GitHub镜像访问2.1. 常用镜像地址2.2.…