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

Mongodb在UPDATE操作中使用$push向数组中插入数据

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

定义

在update操作中,使用$push操作符向数组中插入新的元素。按照下面的语法,使用$push操作符

{$push: {<field1>: <value1>, ...}}

当向嵌入式文档或数组中的数组字段插入元素时,使用点操作符。

行为

  • 自mongodb5.0开始,UPDATE操作按照字段名称的字典顺序更新字段。当字段中包含数字时,按照数字顺序依次更新字段。当然,对一个文档的多个字段操作,是原子性的。
  • 使用$push向文档不存在的字段插入元素时,update操作向文档中插入该字段并将$push中的指定值赋给新增加的字段。
  • 使用$push向非数组字段添加新的元素,数据更新操作会失败。
  • 向指定字段使用$push插入数组时,Mongodb的数据更新操作将即将插入的数组作为整体,插入到目标数组当中。如果用户计划使用$push插入指定数组的每一个元素,需要使用$each操作符。
  • mongodb 5.0版本以后,向$push传入空表达式({ })时,mongodb不再抛出错误。空表达式不会修改字段值 ,也不会在oplog中,添加新的操作记录。
  • Mongodb提供了几个可以与$push搭配使用的数据操作符

操作符

描述

$each

向指定数组一次性添加多个元素

$slice

限制操作数组的容量,需要和$each操作符搭配使用

$sort

对指定数组进行排序,需要和$each操作符搭配使用

$position

指定新元素在数组中插入的位置,需要和$each操作符搭配使用。默认新的元素插入到数组的结尾

当执行$push操作时,当用户指定对数组排序或限制数组长度时,update按照下面的顺序执行$push操作。

应用

创建students集合并插入数据

db.students.insertOne({_id:1,scores: [44,78,38,80]})

向数组中插入元素

db.students.updateOne({_id:1},{$push: {scores: 89}})

将指定数值插入多个文档的数组字段中

向students集合插入新文档

db.students.insertMany([{_id:2,scores: [45,78,38,80,89]},{_id:3,scores: [46,78,38,80,89]},{_id:4,scores: [47,78,38,80,89]},
])

构建UPDATE语句,向students所有文档的scores字段插入新值95

db.students.updateMany({},{$push: {scores: 95}})

向数组中插入多个数值

在$push中使用$each操作符,将多个值插入数组中。

db.students.updateOne({_id:1},{$push: {scores: {$each: [90, 92, 85]}}})

在$push操作符中使用多个数组更新操作符

向students集合中插入文档

db.students.insertMany([{_id:5, quizzes: [{wk:1, score: 10},{wk:2, score: 8},{wk:3, score: 5},{wk:4, score: 6}]}
])

构建数据更新语句,完成下面几个操作

  • 使用$each操作符,向quizzes字段插入多个元素
  • 按照score倒序将quizzes中的元素进行排列
  • 使用$slice限制quizzes数组的容量,保留排序后前面3个元素
db.students.updateOne({_id:5},{$push: {quizzes: {$each: [{wk:5, score: 8},{wk:6, score: 7}, {wk:7, score: 6}],$sort: {score: -1},$slice: 3}}}
)

http://www.lryc.cn/news/378889.html

相关文章:

  • ArcGIS JSAPI 高级教程 - ArcGIS Maps SDK for JavaScript - 锐化效果
  • 信息系统项目管理师 | 信息系统安全技术
  • Java数据类型与运算符
  • 网络虚拟化考题
  • 《C++ Primer》导学系列:第 7 章 - 类
  • idea intellij 2023打开微服务项目部分module未在左侧项目目录展示(如何重新自动加载所有maven项目model)
  • 生成视频 zeroscope_v2_576w 学习笔记
  • H3C综合实验
  • QThread 与QObject::moveToThread在UI中的应用
  • 安卓逆向案例——X酷APP逆向分析
  • 创新案例|星巴克中国市场创新之路: 2025目标9000家店的挑战与策略
  • 计算机网络 MAC地址表管理
  • 【免费API推荐】:各类API资源免费获取【11】
  • 技术驱动会展:展位导航系统的架构与实现
  • 适用于轨道交通专用的板卡式网管型工业以太网交换机
  • excel基本操作
  • C++系统相关操作2 - 获取系统环境变量
  • 适合小白学习的项目1906java Web智慧食堂管理系统idea开发mysql数据库web结构java编程计算机网页源码servlet项目
  • AI通用大模型不及垂直大模型?各有各的好
  • 农产品价格信息系统小程序
  • 【LLM-多模态】高效多模态大型语言模型综述
  • ASP .Net Core创建一个httppost请求并添加证书
  • Redis入门篇
  • 变电站智能巡检机器人解决方案
  • Linux Kernel入门到精通系列讲解(QEMU-虚拟化篇) 2.5 Qemu实现RTC设备
  • 【自动驾驶】通过下位机发送的加速度、角速度计算机器人在世界坐标系中的姿态
  • Python 设计模式(第2版) -- 第四部分(其他设计模式)
  • gitlab升级16.11.3-ee
  • 剑指offer 算法题(搜索二维矩阵)
  • SaaS平台数据对接为什么要选择API对接?