创建

    MongoDB中使用insert方法来向集合插入文档,然后保存到MongoDB中。

    db.foo.insert({“hehe”:”呵呵”})

    如果想批量插入的话可以使用下面这种形式:db.foo.insert([{“hehe”:”呵呵”},{“haha”:”哈哈”}])

  • 插入校验

      插入数据时MongoDB只对数据进行最基本的检查-检查文档的基本结构。如果没有“_id”字段,就会自动增加一个,所有文档都必须小于16MB(这个值是MongoDB设计者人为定义的,未来可能会增加)。这样的限制主要是为了防止不良的模式设计,并且保证性能一致。

      由于MongoDB只进行最基本的检查,所以插入非法数据很容易。因此,应该只允许信任的源连接数据库。

删除

    在MongoDB中可以使用remove()和drop()来删除数据。删除数据是永久性的,不能撤销也不能恢复。

    remove()用来删除文档,有两个重载,如下:

      db.foo.remove():删除整个foo集合中所有文档。但foo不会被删除,也不会删除foo的元数据

      db.foo.remove(搜索条件):删除指定条件的文档

    drop() 用来清空整个集合,它删除文档的速度很快。如下:

      db.foo.drop()

更新

    update方法用来更新数据库里的文档。它有两个参数,一个是查询文档,用于定位需要更新的目标文档;另一个是修改器(modifier)文档。用于说明要对找到的文档进行哪些修改。查询文档参数最好使用”_id”来匹配。这样可以防止查询条件匹配到多个文档。

->var a=db.foo.findOne({"hehe":"呵呵"}); ->delete a.hehe ->a.wuli="wuli韬韬"; ->db.foo.update({"hehe":"呵呵"},a);

  • 部分更新(修改器)

    文档的部分更新是通过更新修改器 (update modifier)来实现的。更新修改器是特殊的键,用来指定复杂的更新操作,比如修改、增加或者删除键,还可以操作数组和内嵌文档

    $set:用来指定一个字段的值。如果这个字段不存在的话,则创建它。

    db.foo.update({“_id”:”123”},{“$set”:{“nb”:”new baby”}});

    如果“nb”这个字段不存在的就会创建一个“nb”字段,反之就会更新“nb”字段值。“$set”甚至可以修改键的类型。如下:

    db.foo.update({“_id”:”123”},{“$set”:{“nb”: [“new bady”,”niubi”]}});

    “$set”还可以用于内嵌文档:

    db.foo.update({“_id”:”123”},{“$set”:{“author.name”:”唐家三少”}})

    $unset:用来删除一个字段,如下:

    db.foo.update({“_id”:”123”,{“$unset”:{“nb”: [“new bady”,”niubi”]}});

    $inc:用来添加已有键的值,如果不存在则会创建一个。它只能用于整型、长整型或浮点型。要是用在其他的数据类型上就会报错。

    db.foo.update({“_id”:”123”},{“$inc”:{“score”:50}})

    如果score键不存在则会创建,并把值设为50。以后每次调用上面的方法,score就会自增50

  • 数据修改器

    $push:向数组末尾添加一个元素,要是这个数组不存在就创建一个数组。

    db.foo.update({“_id”:”123”},{“$push”:{“Age”:12}})

    $each:一次添加多个值。

    db.foo.update({“_id”:”123”},{“$push”:{“Times”:{“$each”: [1,4,3,2,2]}}})

    $slice:限定素组最大长度。它的值必须是负整数。如果添加的值超出限制,那么只会包含最后加入的元素。必须与”$each”使用。

    db.foo.update({“_id”:”123”},{“$push”:{“top10”:{“$each”: [“hehe”,”haha”,”wowo”],”$slice”:-10}})

    $sort:顾名思义,对数组元素进行排序。必须与”$each”使用。

    db.foo.update({“_id”:”123”},{“$push”:{“top10”:{“$each”: [“hehe”,”haha”,”wowo”],”$slice”:-10},”$sort”:{“Times”:-1}})

    $ne/$addToSet: 保证添加到数组内的元素不会重复。

    db.foo.update({“_id”:”123”},{“$ne”,”hehe”},{“$push”:{“nb”:”hehe”}})

    db.foo.update({“_id”:”123”},{“$addToSet”:{“emails”:”hehe@163.com”}})

    $ne $addToSet的区别:$ne不可以和$each一起使用,通过上面的例子就可以看出。$addToSet则可以;$addToSet结合$each可以一次性添加多个元素

    db.foo.update({“_id”:”123”},{“$addToSet”: {“$each”: [“1@163.com”,”2@163.com”]}})

    $pop/$pull: 删除数组元素。“$pop”可以删除数组中头尾的位置元素。有时需要基于特定条件来删除元素,而不仅仅是依据元素的位置,这时可以使用“$pull”来完成。“$pull”会删除所有匹配的文档 。

    db.foo.update({“_id”:”123”},{“$pop”:{“title”:1}})

    db.foo.update({},{“$pull”}:{“_id”:”123”})

  • 数组定位修改器

    若对数组元素之进行操作,有两种方法:通过下标或定位操作符$.

    例如,一个文档的格式如下:

    {

    “_id”:”123”,

    “comments”: [{“comment”:”hehe”,”author”:”zs”}]

    }

  • 使用$来修改author键的值

    db.foo.update({“_id”:”123”},{“$set”:{“comments.$.author”:”ls”}})

  • upsert

    upsert是一种特殊的更新。要是没有找到符合更新条件的文档,就会以要更新的文档为基础创建一个新文档。如果找到了则正常更新。同时,upsert既可以避免竞态问题,又可以缩减代码量。使用方式:设置update方法第三个参数为true就可以了

  • 更新多个文档

    默认情况下,更新只能对符合条件的第一个文档生效。要想更新多个符合条件的文档的话,可以将update方法第四个参数设为true即可。

写入安全机制

    写入安全(Write Concern)是一种客户端设置,用于控制写入的安全级别。有两种最基本的写入安全机制,应答式写入(acknowledged write)和非应答式写入(unacknowledged write)。应答式写入是默认的方式:数据库会给出相应,告诉你写入操作是否成功执行。非应答式写入不返回任何相应,所以也无法知道写入是否成功。2012年以前,MongoDB默认的写入安全机制是非应答写入。所以用2012之前的MongoDB时记得把写入安全机制显式的设为应答式写入

MongoDB学习笔记-创建、更新、删除文档的更多相关文章

  1. 《mongoDB》基本操作-创建/更新/删除文档

    一:基本操作 - db; 当前选择的集合(等于数据库名) > db demo -  use db_name; 选择你要操作的集合 > use demo switched to db dem ...

  2. 2.MongoDB系列之创建更新删除文档

    1. 插入文档 // 单条插入 db.getCollection('blog').insertOne({'type': 'mongodb'}) // 批量 插入 db.getCollection('b ...

  3. MongoDB(二)创建更新删除文档

    插入并保存文档操作 用insert向目标集合插入文档,如果没有_id键则会自动添加.最后自动保存. >db.foo.insert({"bar":"baz" ...

  4. MongoDB创建\更新\删除文档操作

     一.插入\创建文档 --当插入一个不存在的文档时,会自己主动创建一个文档 [root@racdb ~]# mongo MongoDB shell version: 2.4.14 connecti ...

  5. MongoDB学习笔记三—增删改文档上

    插入insert 单条插入 > db.foo.insert({"bar":"baz"}) WriteResult({ }) 批量插入 > db.fo ...

  6. MongoDB学习笔记四—增删改文档下

    $slice 如果希望数组的最大长度是固定的,那么可以将 $slice 和 $push 组合在一起使用,就可以保证数组不会超出设定好的最大长度.$slice 的值必须是负整数. 假设$slice的值为 ...

  7. SpringBoot学习笔记:Swagger实现文档管理

    SpringBoot学习笔记:Swagger实现文档管理 Swagger Swagger是一个规范且完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.Swagger的目标是对RE ...

  8. # MongoDB学习笔记(持续更新)

    启动mongo服务 sodo mongo 显示数据库(显示数据库名称和大小,单位GB) > show dbs admin (empty) local 0.078GB test 0.078GB t ...

  9. JavaScript学习笔记7 之DOM文档对象模型

    一.什么是DOMDocument Object Model 文档 -------对象 ----模型-------缩写DOM DOM是针对HTML和XML文档的一个API(应用程序编程接口).DOM描绘 ...

随机推荐

  1. 利用Ossim系统进行主机漏洞扫描

    利用Ossim系统进行主机漏洞扫描 企业中查找漏洞要付出很大的努力,不能简单的在服务器上安装一个漏洞扫描软件那么简单,那样起不了多大作用.这并不是因为企业中拥有大量服务器和主机设备,这些服务器和设备又 ...

  2. 公司内部openStack环境信息

    公司内部openStack环境信息 yrzl内部openStack云平台平台访问地址,openStack云平台版本为Juno版本内网地址:  http://192.168.3.5:9090/horiz ...

  3. 【转载】FPGA功耗的那些事儿

    在项目设计初期,基于硬件电源模块的设计考虑,对FPGA设计中的功耗估计是必不可少的. 笔者经历过一个项目,整个系统的功耗达到了100w,而单片FPGA的功耗估计得到为20w左右, 有点过高了,功耗过高 ...

  4. 实现MySQL的Replication

    实现MySQL的Replication     实现MySQL的Replication在MySQL 3.23.15版本之后,MySQL提供了数据库复制的功能,可以实现两个数据库实时同步,增强了MySQ ...

  5. 查看静态库(.a文件)内容

    可执行代码的二进制格式,看不到. 1.打开Terminal(终端), cd 到 .a包所在的文件夹 2.输入命令:lipo -info libtrafficstatisticszyf.a  结果如下:

  6. PO、BO、VO、DTO、POJO、DAO的区别

    PO: 基本上就是Entity了 persistant object持久对象 最形象的理解就是一个PO就是数据库中的一条记录. 好处是可以把一条记录作为一个对象处理,可以方便的转为其它对象. ---- ...

  7. 如何循序渐进地学习Javascript

    javascript入门太容易了,导致几乎人人随便看看就能上手,零基础的人学个三五天都能对外宣称自己掌握了js.可是真正掌握js是一件很难的事情.如果在初学一门语言的时候第一想到的是问别人,是很难取得 ...

  8. PeopleSoft Related Language Records

    As we all know, PeopleSoft is capable of maintaining application data in multiple languages within t ...

  9. SLF4J日志门面

    SLF4J官网:http://www.slf4j.org/ SLF4J的作用通俗点讲,就是可以让我们的项目以最小的代价更换不同的日志系统.无需修改代码,只需要添加.删除相应的jar包和配置文件. 1. ...

  10. PHP实现的一分页工具类代码

    总的页数是一个长度一定的木块,这把尺子在这个木块上滑动,前提,尺子的两端不能超出木块:D.发现这么一来要做的事情就是去找这个尺子在木块上的起始点,根据用户给传进来的page变量.哈哈,关键代码下面: ...