05 MongoDB对列的各种操作总结

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 文章总结了MongoDB中对字段(列)进行操作的方法,包括字段的添加、删除、重命名以及字段值的更新等实用技巧。

一. 修改列名

案例1: 修改age为 31 的列的address列的名称修改为address2,只会修改一条记录。

db.person.update({
   age:31},{
   $rename:{
   address:'address2'}})

案例2: name为张三的address列的名修改为address2,会修改所有满足条件的记录。

db.person.update({
   name:'张三'},{
   $rename:{
   address:'address2'}},{
   multi:true})

二. 对列的增加或者删除操作

更新特定字段:

db.game.update({
   "_id": 123}, {
    "$set": {
   "count": 10000}})

# 相当于sql中的
update game set count = 10000 where _id = 123;

删除特定字段:

db.game.update({
   "_id":123}, {
   "$unset": {
   "author":1}})

案例1:增加列名为name的值是张三的列,只会增加一条。

db.person.update({
   name:'张三'},{
   $set:{
   age:''}})

案例2:在集合中增加一列age, 默认为空, 该所有文档中都会增加该列:

db.person.update({
   name:'张三'},{
   $set:{
   age:''}}, {
   multi:true})

案例3:删除列名为name的值是张三的列,列名和列值都会删除,只会删除一条。

db.person.update({
   name:'张三'},{
   $unset:{
   age:''}})

案例4:删除列名为name的值是张三的列,列名和列值都会删除,满足条件的都会删除。

db.person.update({
   name:'张三'},{
   $unset:{
   age:''}},{
   multi:true})

三. 某列字段的更新和插入操作

3.1 $inc: 进行递增或者递减

对应的字段必须是数字,而且递增或递减的值也必须是数字。

案例1:给某一列自增长 $inc ,_id 为1的记录,age 增加 1

# 每次age都加10
db.person.update({
   _id:1},{
   $inc: {
   age:10}})

案例2:改变1条记录

db.person.update({
   name:'张三'},{
   $inc:{
   age:10}})

案例3:改变所有满足条件的记录

db.person.update({
   name:'张三'},{
   $inc:{
   age:10}},{
   multi:ture})
3.2 数组追加

$push 进行数组追加,

案例1:追加一个元素

db.game.update({
   "_id": 123}, {
    "$push": {
   "score": 123}})

案例2:追加多个元素

db.game.update({
   "_id": 123}, {
   "$push": {
   "score": [12,123]}})

注:追加字段必须是数组。如果数组字段不存在,则自动新增,然后追加。

3.3 一次追加多个元素

$pushAll 一次追加多个元素

db.game.update({
   "_id": 123}, {
   "$pushAll": {
   "score": [12,123]}})
3.4 追加不重复元素

$addToSet:追加不重复元素,类似集合Set,只有当这个值不在元素内时才增加:

db.game.update({
   "_id": 123}, {
   "$addToSet": {
   "score": 123}})
3.5 其它字段操作

案例1:如果没有_id 为 4 的记录,则插入

db.person.update({
   _id:4},{
   $set: {
   name:'李四',class:'三班',score:90}},{
   upsert:true})

# 插入的数据结果
{
    "_id" : 4, "name" : "李四", "class" : "三班", "score" : 90 }

案例2:如果没有更新行,插入额外的列:$setOnInsert,upsert:true

db.person.update({
   _id:5},{
   $setOnInsert:{
   name:'王五',like:'football'}},{
   upsert:true})

# 执行后,数据库中多出如下记录:
{
    "_id" : 5, "like" : "football", "name" : "王五" }

# 假如数据库中有_id 为 5 的记录,执行以下的语句,不会有任何影响,不会新增,也不会修改。
db.person.update({
   _id:5},{
   $setOnInsert:{
   name:'王五',like:'football',height:178}},{
   upsert:true});

案例:如果没有更新行,插入额外的列:$setOnInsert,upsert:true

db.person.update({
   _id:5},{
   $setOnInsert:{
   name:'王五',like:'football'}},{
   upsert:true})

# 假如有_id 为5的记录,执行以下的语句,不会有任何影响,不会新增也不会修改
db.person.update({
   _id:5},{
   $setOnInsert:{
   name:'王五',like:'football',height:178}},{
   upsert:true})

四. 删除元素

4.1 删除一个元素

$pop 删除元素, 每次只能删除数组中的一个元素,1表示删除最后一个,-1表示删除第一个。

# 删除最后一个元素
db.game.update({
   "_id": 123}, {
   "$pop": {
   "score": 1}})

# 删除第一个元素
db.game.update({
   "_id": 123}, {
   "$pop": {
   "score": -1}})

案例:删除特定元素

db.game.update({"_id": 123}, {"$pull": {"score": 123}})
4.2 删除特定元素

$pull 删除特定元素

# 删除数组score内值等于123的元素。
db.game.update({
   "_id": 123}, {
   "$pull": {
   "score": 123}})
4.3 删除多个特定元素

$pullAll 删除特定元素

# 删除数组内值等于123或12的元素。
db.game.update({
   "_id": 123}, {
   "$pullAll": {
   score: [123,12]}})
相关文章
|
NoSQL 关系型数据库 MySQL
如何向mongoDB中添加新的字段附代码(全)
关于MongoDB更多的知识点可看我之前这篇文章: MongoDB框架零基础入门本身MongoDB的连接就和Mysql的数据库一样 Mysql连接方式:mysql -u -root -p(标准模式下) MongoDB类似:mongo -u root -p之所以要增加字段值 一般都是python web框架中,在form表单内增加了一个字段值写入数据库(只有最新的数据才有这个字段值) 之前数据没有的字段值只能通过数据库添加 具体添加方式可以通过数据库内或者脚本一键添加(两种方式都差不多)在数据库内增加字段值
738 0
如何使用Postman里的collections?
如何使用Postman里的collections?
288 0
|
缓存 TensorFlow 算法框架/工具
TensorFlow学习笔记(一): tf.Variable() 和tf.get_variable()详解
这篇文章详细介绍了TensorFlow中`tf.Variable()`和`tf.get_variable()`的使用方法、参数含义以及它们之间的区别。
471 0
|
存储 NoSQL 关系型数据库
Percona XtraBackup是否支持MongoDB数据库备份?
【5月更文挑战第13天】Percona XtraBackup是否支持MongoDB数据库备份?
371 1
|
11月前
|
算法 容器
令牌桶算法原理及实现,图文详解
本文介绍令牌桶算法,一种常用的限流策略,通过恒定速率放入令牌,控制高并发场景下的流量,确保系统稳定运行。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
令牌桶算法原理及实现,图文详解
|
12月前
|
自然语言处理 Python Windows
python知识点100篇系列(23)- 使用stylecloud生成词云
【10月更文挑战第10天】`stylecloud` 是 `wordcloud` 的优化版,支持使用 Font Awesome 图标自定义词云形状,操作更简便。本文介绍如何安装 `jieba` 和 `stylecloud` 库,并使用它们生成中文词云。通过 `jieba` 进行分词,再利用 `stylecloud` 的 `gen_stylecloud` 方法生成具有特定形状和颜色的词云图像。
240 0
python知识点100篇系列(23)- 使用stylecloud生成词云
|
监控 前端开发 网络协议
《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(5)-Fiddler监控面板详解
【2月更文挑战第7天】《吐血整理》保姆级系列教程-玩转Fiddler抓包教程(5)-Fiddler监控面板详解 按照从上往下,从左往右的计划,今天就轮到介绍和分享Fiddler的监控面板了。监控面板主要是一些辅助标签工具栏。有了这些就会让你的会话请求和响应时刻处监控中毫无隐私可言。监控面板是fiddler最核心的功能之一。记录了来自于服务器端(webServer)的请求会话。包括页面的请求和静态文件的请求。状态面板主要显示的是会话及会话的状态。位于软件界面右边的这一大块面板,即为辅助标签 + 工具,宏哥称之为监控。
375 0
|
编译器
html动态爱心代码【三】(附源码)
html动态爱心代码【三】(附源码)
918 0
|
前端开发 JavaScript 开发者
javascript实现黑客帝国代码雨特效背景效果
javascript实现黑客帝国代码雨特效背景
280 0
javascript实现黑客帝国代码雨特效背景效果
|
SQL 数据库
SQL DISTINCT 用法总结
SQL DISTINCT 用法总结
4706 3