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]}})
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
NoSQL MongoDB 索引
MongoDB创建、查看、删除索引
MongoDB创建、查看、删除索引
146 0
|
2月前
|
SQL NoSQL Unix
MongoDB聚合操作总结
这篇文章总结了MongoDB中聚合操作的作用、方法、常见聚合表达式以及聚合管道的概念和常用操作符,以及SQL与MongoDB聚合操作的对应关系。
41 2
MongoDB聚合操作总结
|
25天前
|
SQL NoSQL 数据处理
深入探索MongoDB的聚合操作
【10月更文挑战第13天】
11 0
|
2月前
|
存储 NoSQL 关系型数据库
MongoDB中的索引操作总结
这篇文章总结了MongoDB中索引的概念、创建方法、常见操作指令、限制以及索引对查询效率的影响。
43 2
|
2月前
|
SQL NoSQL JavaScript
04 MongoDB各种查询操作 以及聚合操作总结
文章全面总结了MongoDB中的查询操作及聚合操作,包括基本查询、条件筛选、排序以及聚合管道的使用方法和实例。
75 0
MongoDB-聚合操作$out
聚合管道阶段 $out: 将前面阶段处理完的文档写入一个新的集合
98 0
MongoDB-聚合操作$out
|
NoSQL MongoDB 索引
MongoDB-删除索引
查看索引的名称, 通过 getIndexes() 获得:
408 0
|
索引
MongoDB-索引对排序影响
如果排序的字段, 正好是索引的字段, 那么会大大提升排序效率。
90 0
|
NoSQL MongoDB
一日一技:在 MongoDB 中,如何批量更新不同数据为不同值?
一日一技:在 MongoDB 中,如何批量更新不同数据为不同值?
1101 0