mongoDB文档操作

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 数据库操作无非就是增、删、改、查。这篇主要介绍增、删、改。 1.增 Mongodb插入操作很简单,使用关键字“insert”。实例: 1 > db.test.blog.insert({"haha":"xiaohaha","abc":"123"}) 2 > db.

数据库操作无非就是增、删、改、查。这篇主要介绍增、删、改。

1.增

Mongodb插入操作很简单,使用关键字“insert”。实例:

 1 > db.test.blog.insert({"haha":"xiaohaha","abc":"123"})  
 2 > db.test.blog.find();  
 3 { "_id" : ObjectId("5334dd149b7a445ea2166559"), "title" : "love", "content" : "I  
 4  love you" }  
 5 { "_id" : ObjectId("5334dd669b7a445ea216655a"), "job" : "java", "city" : "wuhan"  
 6  }  
 7 { "_id" : ObjectId("5334ec3f9b7a445ea216655b"), "a" : "b" }  
 8 { "_id" : ObjectId("5338bc89125a366c3f32dd00"), "haha" : "xiaohaha" }  
 9 { "_id" : ObjectId("5338bce3125a366c3f32dd01"), "haha" : "xiaohaha", "abc" : "12  
10 3" }  
11 >  

使用insert关键字,里面设置文档。如果文档中没有“_id”,Mongodb会自动生成。

当执行插入操作时,数据库会校验是否包含“_id”键,并且文档不超过4MB,除此之外,不做其他检查。这样使得数据库更加安全,远离注入式攻击(Mongodb在插入时不执行代码)。

2.删

1 > db.test.blog.remove({"a":"b"})  
2 > db.test.blog.find({"a":"b"})  
3 > db.test.blog.remove()  

remove可以接受一个查询文档作为可选参数,给定参数以后,只有符合条件的文档才会被删除。如果没有带参数,那么就是删除集合中的所有文档,但是不会删除集合本身,原来的索引也会保留。

3.改

文档存入数据库后,可以使用update方法来修改它,update有两个参数,一个是查询文档,用来找出要更新的文档,另一个是修改器文档,描述对找到的文档做哪些修改。更新操作时原子的,若是两个更新同时发生,先到达服务器的先执行,接着执行另一个。

更新方式一:文档结构变动比较大使用
 1 > var jobs = db.test.blog.findOne({"job":"java"});   //这里这能查询单个对象,才能在后面使用update修改  
 2 > jobs.job = "hadoop";  
 3 hadoop  
 4 > jobs.exp = "5 year";  
 5 5 year  
 6 > jobs.city = ["wuhan","beijin","shanghai"];  
 7 [ "wuhan", "beijin", "shanghai" ]  
 8 > db.test.blog.update({"job":"java"},jobs);  //使用update修改  
 9 > db.test.blog.find({"job":"hadoop"});  
10 { "_id" : ObjectId("5334dd669b7a445ea216655a"), "job" : "hadoop", "city" : [ "wuhan", "beijin", "shanghai" ], "exp" : "5 year" }  
修改数据方式一代码
更新方式二:使用修改器,文档只做部分更新使用
  • $set和$unset

$set用来指定一个键的值。如果键不存在,则创建它。可以用来修改值,数组,内嵌文档。

$unset用来卸载一个键值对。

 1 > db.test.blog.insert({"_id":0001,"name":"joe","age":25,"favortie":"book"}); //插入数据  
 2 > db.test.blog.find();  //查询  
 3 { "_id" : 1, "name" : "joe", "age" : 25, "favortie" : "book" }  
 4 > db.test.blog.update({"name":"joe"},  //更新单个数据age,并且改变数据类型int->string  
 5 ... {"$set":{"age":"29"}})  
 6 > db.test.blog.find();  
 7 { "_id" : 1, "age" : "29", "favortie" : "book", "name" : "joe" }  
 8 > db.test.blog.update({"name":"joe"},  //变为数组  
 9 ... {"$set":{"favortie":["book","tv"]}})  
10 > db.test.blog.find();  
11 { "_id" : 1, "age" : "29", "favortie" : [ "book", "tv" ], "name" : "joe" }

$unset代码

1 > db.test.blog.find();  
2 { "_id" : 1, "age" : "29", "favortie" : [ "book", "tv" ], "name" : "joe" }  
3 > db.test.blog.update({"name":"joe"},  
4 ... {"$unset":{"age":1}})  
5 > db.test.blog.find();  
6 { "_id" : 1, "favortie" : [ "book", "tv" ], "name" : "joe" }  

 更新数字

$inc用来增加键值,键不存在时创建

1 > db.test.blog.update({"name":"joe"},{"$inc":{"age":1}});  
2 > db.test.blog.find();  
3 { "_id" : 1, "age" : 1, "favortie" : [ "book", "tv" ], "name" : "joe" } 

数组修改器

$push会向已有的数组末尾加入一个元素,要是没有就创建数组

1 > db.test.blog.find();  
2 { "_id" : 1, "age" : 1, "like" : [ "eat", "booke" ], "name" : "joe" }  
3 > db.test.blog.update({"name":"joe"},{$push:{"like":"abc"}});  
4 > db.test.blog.find();  
5 { "_id" : 1, "age" : 1, "like" : [ "eat", "booke", "abc" ], "name" : "joe" } 

 $pop可以从数组任何一端删除元素。{$pop:{key:1}}从数组末尾删除,{$pop:{key:1}}则从头部删除

$pull基于特定条件删除

1 > db.test.blog.update({"name":"joe"},{$pull:{"like":"booke"}});  
2 > db.test.blog.find();  
3 { "_id" : 1, "age" : 1, "like" : [ "eat", "abc" ], "name" : "joe" }

数组定位

数组定位可以使用位置或者定位操作符“$”

数组下标都是从0开始,所以可以使用下标直接作为键来选择元素

 

使用upsert(update or insert)

upsert是一种特殊的更新,要是没有文档符合更新要求,就会以这个条件和更新文档做为基础创建一个新的文档。如果找到匹配的文档,则正常更新。update的第三个参数表示是否使用upsert更新

 1 > db.test.blog.find()  //查询所有数据  
 2 { "_id" : 1, "age" : 1, "like" : [ "eat", "abc" ], "name" : "joe" }  //没有我要更新的数据  
 3 > db.test.blog.update({"url":"www.baidu.com"},{"$inc":{"visits":1}},true)  //使用upsert方式修改  
 4 > db.test.blog.find()  //查询所有数据,发现多了一个文档  
 5 { "_id" : 1, "age" : 1, "like" : [ "eat", "abc" ], "name" : "joe" }  
 6 { "_id" : ObjectId("533a1c27b653a97435a02030"), "url" : "www.baidu.com", "visits  
 7 " : 1 }  
 8 > db.test.blog.update({"url":"www.baidu.com"},{"$inc":{"visits":1}},true)  //再次使用upsert  
 9 > db.test.blog.find()  
10 { "_id" : 1, "age" : 1, "like" : [ "eat", "abc" ], "name" : "joe" }  //发现是修改文档  
11 { "_id" : ObjectId("533a1c27b653a97435a02030"), "url" : "www.baidu.com", "visits  
12 " : 2 }  

更新多个文档

默认情况下,更新只对符合条件的第一个文档进行修改,如果有多个符合条件的文档,其余文档就没有变化。如果想要更新所有匹配条件的文档,就要设置第四个参数为true

 1 > db.test.blog.find({"url":"www.baidu.com"});  //查询url为baidu的记录有两条  
 2 { "_id" : ObjectId("533a1c27b653a97435a02030"), "url" : "www.baidu.com", "visits  
 3 " : 2 }  
 4 { "_id" : "2", "url" : "www.baidu.com", "visits" : "5" }  
 5  //更新所有符合条件的数据  
 6 > db.test.blog.update({"url":"www.baidu.com"},{"$set":{"visits":10}},false,true)  
 7   
 8 > db.test.blog.find({"url":"www.baidu.com"});  //重新查询,数据都修改了  
 9 { "_id" : ObjectId("533a1c27b653a97435a02030"), "url" : "www.baidu.com", "visits  
10 " : 10 }  
11 { "_id" : "2", "url" : "www.baidu.com", "visits" : 10 }  

update的四个参数描述:

1.需要更新文档匹配的条件

2.需要更新的数据

3.是否采用upsert方式更新:默认false

4.是否使用匹配条件的文档都修改:默认false

 

当神已无能为力,那便是魔渡众生
相关实践学习
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
目录
相关文章
|
21天前
|
NoSQL MongoDB 数据库
MongoDB 更新文档
10月更文挑战第14天
37 2
|
1月前
|
存储 NoSQL MongoDB
数据的存储--MongoDB文档存储(二)
数据的存储--MongoDB文档存储(二)
|
20天前
|
SQL NoSQL MongoDB
MongoDB 查询文档
10月更文挑战第15天
12 1
|
1月前
|
存储 NoSQL 关系型数据库
数据的存储--MongoDB文档存储(一)
数据的存储--MongoDB文档存储(一)
|
20天前
|
NoSQL MongoDB
MongoDB 删除文档
10月更文挑战第15天
33 0
|
21天前
|
存储 JSON NoSQL
MongoDB 插入文档
10月更文挑战第14天
24 0
|
2月前
|
SQL NoSQL Shell
03 MongoDB文档的各种增加、更新、删除操作总结
文章总结了MongoDB中文档的增删改操作,包括插入文档、更新现有文档以及删除文档的具体方法和示例。
86 0
|
4月前
|
DataWorks NoSQL fastjson
DataWorks操作报错合集之DataX进行MongoDB全量迁移的过程中,DataX的MongoDB Reader插件在初始化阶段找不到Fastjson 2.x版本的类库,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
存储 NoSQL Linux
【MongoDB】下载安装、指令操作
【MongoDB】下载安装、指令操作
178 1
|
5月前
|
分布式计算 DataWorks NoSQL
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决