创建、更新和删除文档         

1. 插入并保存:

1). 单条插入,insert : db.foo.insert({"bar":"baz"})

2). 批量插入,batchInsert : db.foo.insert([{"_id":0},{"_id":1}])

3). 要是只导入原始数据(例如:从数据feed或者mysql中导入),可以使用命令行工具,如mongoimport,而不是批量插入。

4). 批量插入中如果遇到错误,这个文档及之后的文档全部插入失败。可以使用continueOnError选项,忽略错误并且继续执行后续插入。

5). 当前版本MongoDB能收的最大消息长度是48M

6). 插入校验:主要验证有没有"_id",是否单条文档小于16M

2. 删除文档

1). 删除集合中的所有文档: db.foo.remove()

2). 删除符合条件的文档: db.mailing.llist.remove({"out":true})

3). 使用drop直接删除整个集合会更快: db.foo.drop。会删除索引等信息。

3. 更新文档

 1). update更新:update有两个参数,第一个是查询文档,用于定位需要更新目标文档;另一个是修改器文档,用于说明要对找到的文档进行哪些修改。

2). 更新多个文档:默认情况下,更新只对符合匹配条件的第一个文档执行操作。要是有多个文档符合条件,只有第一个文档会被更新。要更新所有匹配的文档可以将update

第四个参数设置为true。update的默认行为以后可能会发生变化,会默认更新所有符合条件的文档,只有第四个参数设置为false才会只更新一个,所以建议每次都显式

表明要不要多文档更新。

3). 要想知道多文档更新到底更新了多少文档,可以运行getLastError命令。

4). 可以通过findAndMofify命令得到被更新的文档。返回的是修改之前的数据。findAndModify可以使用"update"键,也可以使用"remove"键。findAndMofify有很多可使用的字段:

findAndModify : 字符串,集合名

query : 检索文档的条件

sort : 排序结果条件

udpate : 用于对文档进行更新

remove : 表示是否删除文档,布尔类型

new : 布尔类型,表示返回更新前的文档还是更新后的文档。默认是更新前的文档。

fields : 文档需要返回的字段

upert : 布尔类型。值为true表示这是一个upsert。默认为false.

update 和 remove 必须有一个,也只能有一个。要是没有匹配的文档,这个命令会返回一个错误。

5). update可以有四个参数:

a. 第一个是查询文档,用于定位需要更新目标文档

b. 另一个是修改器文档,用于说明要对找到的文档进行哪些修改。

c. udpate的第三个参数是个upsert.要是没有找到符合更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档。如果找到,正常更新。默认为false。

d. 默认情况下,更新只对符合匹配条件的第一个文档执行操作。要是有多个文档符合条件,只有第一个文档会被更新。要更新所有匹配的文档可以将update第四个参数设置为true。

update的默认行为以后可能会发生变化,会默认更新所有符合条件的文档,只有第四个参数设置为false才会只更新一个,所以建议每次都显式表明要不要多文档更新。

4. 修改器:

1). $set : $set用来指定一个字段的值。如果这个字段不存在,则创建它 : db.users.update({"_id":ObjectId("***")},...{"$set":{"name":"lisi"}})

2). $unset : 将某个键完全删除

3). $inc :增加已有的键值,或者该键不存在那就创建一个。"$inc" 只能用于整型、长整型或双精度浮点型的值

4). $push : 向已有的数据末尾加一个元素,要是没有就创建一个。

5). $each : 使用$each子操作符,可以通过一次$push操作添加多个值

6). $slice : 将$slice和$push组合一起使用,这样就可以保证数组不会超过设定好的最大长度,这实际上就得到一个最多包含N个元素的数组。$slice得值必须是负整数,包含最后加入的N个元素。

7). $sort : 排序。注意,不能只将$slice或者$sort与$push 配合使用,必须和$each一起使用

8). $ne : 不重复

9). $addToSet : 避免往集合中插入的值重复。将$addToSet和$each组合起来,可以添加多个不同的值。与set属性类似

10). $pop : 从数组中删除元素。{"$pop":{"key":1}}从数组末尾删除一个元素,{"$pop":{"key":-1}} 从头部删除一个元素

11). $pull : 基于特定条件来删除元素,而不仅仅依据元素位置,这时可以使用$pull。$pull 会将所有匹配的元素删除。

12). 基于位置的数据修改器:通过位置或者定位操作符("$")。定位符只更新第一个匹配的元素。

13). 修改器的速度:$inc能就地修改,因为不需要改变文档的大小,只需要将键的值修改一下,所以非常快。而数据修改器可能会改变文档的大小,就会慢一些。

14). 填充因子:填充因子是MongoDB为每个文档预留的增长空间。

15). 移动文档非常慢。MongoDB必须将文档原先占用的空间释放掉,然后将文档写入另一片空间。

16). 如果你的模式在进行插入和删除时会进行大量的移动或者经常打乱数据,可以使用usePowerOf2Sizes选项以提高磁盘复用率。可以通过collMod命令来设定这个选项:

db.runCommond({"collMod":collectionName,"usePowerOf2Sizes":true})

 这个集合之后进行所有空间分配时,得到的块大小都是2的幂。这个选项可能会导致初始空间分配不再那么高效。

17). upsert : 要是没有找到符合更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档。如果找到,正常更新。udpate的第三个参数表示这是个upsert.

db.analytics.update({"url":"/blog"},{"$inc":{"pageviews":1}},true)

这行代码更高效,并且是原子性的。

18). $setOnInsert : 只会在文档插入时设置字段的值。之后的所有更新操作中,这个字段的值都不会再改变了。

19). save shell 帮助程序:save 是一个shell函数,如果文档不存在,它会自动创建文档;如果文档存在,它就更新这个文档。

20). udpate 第一个参数是条件,第二个参数是更新内容,第三个参数表示没有符合条件的数据时,是创建还是不进行任何操作,第四个参数表示更新一个还是所有符合条件记录。

5. 写入安全机制

1). 默认情况下,插入、删除和更新会一直等待数据库响应(是否写入成功) ,然后才会继续执行。通常,遇到错误时,客户端会抛出一个异常。

2). 应答式写入是默认的方式:数据库给出响应,告诉你写入操作是否成功执行。非应答式写入不返回任何任何响应,所以无法知道写入是否成功。

3). shell 在执行非应答式写入后,会检查最后一个操作是否成功。可以调用getLastError手动强制在shell中进行检查,这一操作会检查最后一次操作中的错误。?

Mongodb 笔记02 创建、更新和删除文档的更多相关文章

  1. MongoDB学习笔记二:创建、更新及删除文档

    插入并保存文档 对目标集使用insert方法插入一个文档: > db.foo.insert({"bar" : "baz"}) 这个操作会给文档增加一个&q ...

  2. MongoDB学习笔记-创建、更新、删除文档

    创建     MongoDB中使用insert方法来向集合插入文档,然后保存到MongoDB中.     db.foo.insert({"hehe":"呵呵"} ...

  3. 创建、更新、删除文档。 --- Mongodb权威指南阅读。

    插入文档: db.foo.insert({ "key" : "value"}); 使用insert插入一个数据,文档中如果没有_id 会自动给文档增加_id. ...

  4. Elasticsearch 创建、更新、删除文档、处理冲突

    ----创建新文档---- 1._index,_type和_id的组合可以唯一标识一个文档,所以确保一个新文档的最简单的办法就是,使用索引请求的POST形式让elsticsearch自动生成唯一_id ...

  5. Elasticsearch 索引、更新、删除文档

    一.Elasticsearch 索引(新建)一个文档的命令: curl XPUT ' http://localhost:9200/test_es_order_index/test_es_order_t ...

  6. MongoDB快速入门(八)- 删除文档

    删除文档 MongoDB 的 remove()方法用于从集合中删除文档.remove()方法接受两个参数.一个是标准缺失,第二是justOne标志 deletion criteria : 根据文件(可 ...

  7. MongoDb 创建、更新以及删除文档常用命令

    mongodb由C++写就,其名字来自humongous这个单词的中间部分,从名字可见其野心所在就是海量数据的处理.关于它的一个最简洁描述为:scalable, high-performance, o ...

  8. 详细描述一下 Elasticsearch 更新和删除文档的过程?

    1.删除和更新也都是写操作,但是 Elasticsearch 中的文档是不可变的,因此不 能被删除或者改动以展示其变更: 2.磁盘上的每个段都有一个相应的.del 文件.当删除请求发送后,文档并没有真 ...

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

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

随机推荐

  1. oracle 语句之对数据库的表名就行模糊查询,对查询结果进行遍历,依次获取每个表名结果中的每个字段(存储过程)

    语句的执行环境是plsql的sql窗口, 语句的目的是从整个数据库中的所有表判断 不等于某个字段的记录数 . 代码如下: declare s_sql clob:=''; -- 声明一个变量,该变量用于 ...

  2. jsp九大内置对象之二response

    这里主要写response向浏览器输出数据时的编码,输出数据有两种: response.getOutStram().write("讲讲".getBytes("utf-8& ...

  3. eg_8

    问题描述:比较两数组是否相等 Demo_1: import java.util.Arrays; public class TestArray { public static void main(Str ...

  4. oh my god 四则运算

    Week1地址:https://git.coding.net/leiqh549/four.git 需求分析: 1.一个生成n道四则运算的程序,要求数字在0-100间,运算符在3-5个之间且运算符至少包 ...

  5. Python开发【第五篇】迭代器、生成器、递归函数、二分法

    阅读目录 一.迭代器 1. 迭代的概念 #迭代器即迭代的工具(自定义的函数),那什么是迭代呢? #迭代:指一个重复的过程,每次重复都可以称之为一次迭代,并且每一次重复的结果是下一个迭代的初始值(例如: ...

  6. jquery 点击弹出层自身以外的任意位置,关闭弹出层

    <!--弹出层---> <div class="mask">    <div class="wrap"></div&g ...

  7. 简单说明webbench的安装和使用

    简介 运行在linux上的一个性能测试工具 官网地址:http://home.tiscali.cz/~cz210552/webbench.html 如果不能打开的话,也可以直接到网盘下载:http:/ ...

  8. pygame入门

    pygame入门 说明 在学习pygame时,主要参考了目光博客的教程.目光博客 原教程是2011年写的,年代比较久远了,使用Python2.我学习时使用python3将代码重新实现了一遍,同时补充了 ...

  9. [转帖漫画]什么是 MD5 算法?---摘要算法 具体算法 一直搞不清楚

    漫画:什么是 MD5 算法? 2017-10-05 20:16 来源:伯乐专栏作者/玻璃猫,微信公众号 - 梦见 好文投稿, 请点击 → 这里了解详情 梦见 摘要哈希生成的正确姿势是什么样呢?分三步: ...

  10. 【转载】css3动画简介以及动画库animate.css的使用

    原文地址:http://www.cnblogs.com/2050/p/3409129.html 在这个年代,你要是不懂一点点css3的知识,你都不好意思说你是个美工.美你妹啊,请叫我前端工程师好不好. ...