当前位置: 首页 > 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}}}
)

相关文章:

  • 简单介绍vim
  • PostgreSQL查看表的大小
  • 性能工具之 JMeter 常用组件介绍(八)
  • Python3发送邮件如何添加附件?怎么配置?
  • Python抓取天气信息
  • SQL AND OR 运算符的使用与区别
  • 全域外卖系统源码部署怎么做,外卖市场新机遇!
  • 护眼灯哪些牌子好?一文刨析护眼灯怎么选择!
  • 通用大模型VS垂直大模型,你更青睐哪一方?
  • 神经网络模型---ResNet
  • 一个基于MySQL的数据库课程设计的基本框架
  • 通过防抖动代码解决ResizeObserver loop completed with undelivered notifications.
  • Java基础学习-方法
  • ByteTrack跟踪理解
  • 存储、管理和展示多媒体文件
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【EOS】Cleos基础
  • extjs4学习之配置
  • Flex布局到底解决了什么问题
  • mysql常用命令汇总
  • nodejs:开发并发布一个nodejs包
  • Python - 闭包Closure
  • vue的全局变量和全局拦截请求器
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 聊聊hikari连接池的leakDetectionThreshold
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 微信小程序--------语音识别(前端自己也能玩)
  • 小李飞刀:SQL题目刷起来!
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 国内开源镜像站点
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • ​香农与信息论三大定律
  • # Kafka_深入探秘者(2):kafka 生产者
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • (bean配置类的注解开发)学习Spring的第十三天
  • (Qt) 默认QtWidget应用包含什么?
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (七)Flink Watermark
  • (学习日记)2024.02.29:UCOSIII第二节
  • (一)Thymeleaf用法——Thymeleaf简介
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)scrum常见工具列表
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .gitignore文件使用
  • .Net 6.0 处理跨域的方式
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 命令行参数包含应用程序路径吗?
  • .NET 使用 XPath 来读写 XML 文件