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

1.增

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

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

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

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

2.删

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

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

3.改

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

更新方式一:文档结构变动比较大使用
 > var jobs = db.test.blog.findOne({"job":"java"});   //这里这能查询单个对象,才能在后面使用update修改
> jobs.job = "hadoop";
hadoop
> jobs.exp = "5 year";
5 year
> jobs.city = ["wuhan","beijin","shanghai"];
[ "wuhan", "beijin", "shanghai" ]
> db.test.blog.update({"job":"java"},jobs); //使用update修改
> db.test.blog.find({"job":"hadoop"});
{ "_id" : ObjectId("5334dd669b7a445ea216655a"), "job" : "hadoop", "city" : [ "wuhan", "beijin", "shanghai" ], "exp" : "5 year" }

修改数据方式一代码

更新方式二:使用修改器,文档只做部分更新使用
  • $set和$unset

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

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

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

$unset代码

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

更新数字

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

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

数组修改器

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

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

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

$pull基于特定条件删除

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

数组定位

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

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

使用upsert(update or insert)

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

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

更新多个文档

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

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

update的四个参数描述:

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

2.需要更新的数据

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

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

mongoDB文档操作的更多相关文章

  1. mongoDB 文档操作_删

    mongoDB 文档删除 MySQL对比 mysql delete from table where ... mongo db.collection.deleteOne(query) 删除函数 del ...

  2. MongoDB (八) MongoDB 文档操作

    一. MongoDB 插入文档 insert() 方法 要插入数据到 MongoDB 集合,需要使用 MongoDB 的  insert() 或 save() 方法. 语法 insert() 命令的基 ...

  3. mongoDB 文档操作_查

    基本查询命令 find 查找复合条件的所有文档 命令 db.collection.find(query,field) 参数 query 查找条件 格式: {ssss:"xxx"}是 ...

  4. mongoDB 文档操作_改

    mongoDB 更改操作 格式对比 MySQL update table set .... where .... db.collection.updateOne(query,update,upsert ...

  5. mongoDB文档操作【增删改】

    MongoDB 插入文档 文档的数据结构和JSON基本一样. 所有存储在集合中的数据都是BSON格式. BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON. 插入文档 Mo ...

  6. MongoDB自学------(3)MongoDB文档操作

    一.插入文档 二.查询文档 三.更新文档 可以看到标题(title)由原来的 "Mongodb" 更新为了 "MongoDBtest". 以上语句只会修改第一条 ...

  7. mongoDB 文档操作_增

    增加 / 插入 /保存 单文档插入 命令 db.collection.insertOne(doc) 功能 向被 use 的数据库中插入数据 实例 db.class.insertOne({"n ...

  8. MongoDB入门---文档操作之增删改

    之前的两篇文章,已经分享过关于MongoDB的集合还有数据库的各种操作,接下来就涉及到最主要的喽,那就是数据方面的操作,在这里叫做文档操作.话不多说,大家来看正文.     首先来看一下它的数据结构: ...

  9. mongodb安装,库操作,集合操作(表),文档操作(记录)

    安装 1.下载地址 https://fastdl.mongodb.org/win32/mongodb-win32-x86_64-2008plus-ssl-4.0.8-signed.msi 2.如果报没 ...

随机推荐

  1. CodeForces 591A Wizards' Duel

    水题 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> us ...

  2. PhpStorm 10.0注册

    ntelliJ IDEA开源社区 提供了如下通用激活方法:注册时选择License server,填http://idea.lanyus.com/,然后点击 OK,再点一次OK,就搞定了.注意http ...

  3. UITextField和UIViewConteoller

    UITextField控件 UITextFiled常用属性和方法   UITextField是常用的文本输入控件,比如我们用的QQ的登录界面,词典输入要查询的单词都使用了文本框控件,如下图所示.之前介 ...

  4. Task Cancellation: Parallel Programming

    http://beyondrelational.com/modules/2/blogs/79/posts/11524/task-cancellation-parallel-programming-ii ...

  5. 【HighCharts系列教程】三、图表属性——chart

    一.chart属性说明 Chart是HighCharts图表中主要属性,包括了图表区域的颜色.线条.高度.宽度.对齐.图表类型等诸多属性,也是HighCharts图表中必须配置的属性之一. 配置cha ...

  6. RMQ问题再临

    RMQ问题再临 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 终于,小Hi和小Ho踏上了回国的旅程.在飞机上,望着采购来的特产——小Hi陷入了沉思:还记得在上上周他们去 ...

  7. [Big Data]hadoop分布式系统在Linux系统安装

    待完善 Hadoop2.6.0部署与应用 一.    环境准备 硬件:3台虚拟机 内存:至少512MB 硬盘:至少20G 操作系统:rhel6.4  64位 最小化安装 主机名 IP(局域网) 描述 ...

  8. nginx实战

    原文:http://www.cnblogs.com/yucongblog/p/6289628.html nginx实战   (一) nginx环境的搭建安装流程: 1 通过ftp将nginx-1.11 ...

  9. WPF 制作电子相册浏览器

    周末的时候,闲着无聊,做了一个电子相册浏览器.比较简单.界面如下: 主要部分代码如下: MainWindow.xaml <local:HeaderedWindow x:Class="P ...

  10. 扩展对EasyUI的校验规则

    var myReg = RegExp(/[(\*)(\|)(\\)(\:)(\")(\/)(\<)(\>)(\?)]+/); $.extend($.fn.validatebox. ...