博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongDB_插入详解
阅读量:7089 次
发布时间:2019-06-28

本文共 2198 字,大约阅读时间需要 7 分钟。

  hot3.png

insert_api

1,结构

db.collection.insert(   
,   {     writeConcern: 
,     ordered: 
   })
名称 类型 说明
document or docuemnts
document
需要插入的数据
writeConcern document 2.6版新功能  安全写入
ordered boolean 2.6版新功能  有序插入文档

2,返回值

    WriteResult({nInsert:1}); nInsert表示插入的个数,如果插入失败   则会返回具体原因

3,参数-文档/数组

        MongDB和mysql一样可以执行单文档和多文档插入;区别在于一个传入json元素文档对象,一个传入json数组元素文档对象;

        db.ccc.insert({name:"zg",age:25,sex:1});

        db.ccc.insert([

                                {_id:1,name:"a",age:11},

                                {name:"a",sex:11},

                                ])

        注:上面两条语句可以看出MongDB的几个特色

                        1,在插入的时候 如果集合不存在 则直接创建集合; 在实际应用中 mysql会需要创建表;

                        2,字段变化 随时可行   

                        3,_id 字段   这个字段非常重要,我们的查询优化的话主要是靠这个了;可指定  保证集合唯一

                        4,option 的parameter 采用json风格

                        

4,参数-安全写入

        案例:

        MongDB的写入/更新操作都有一定的机制;我们先看一个UML时序图

113852_CYsA_1249631.png

     分析:Driver就是我们驱动(和JDBC连接的); MongDB就是我们数据库模型;

                1,Driver发起插入操作指令和发送数据;

                2,MongDB接收到数据,开始执行操作;

                3,Driver发起获得执行操作异常的指令;

                4,MongDB返回给异常集文档;

                5,MongDB对操作数据开始Apply操作(生效);

        总结:1,执行一个插入操作 会在Driver和DB之间有几个必不可少的步骤   发送操作指令   发送数据   DB执行    获取异常集文档  操作文档生效;

                  2,无论我们操作在那一步   如果DB不执行Apply操作   那么数据始终是无效的的;可以理解为事务提交失败回滚了;

                  3,driver始终会调用getLastError 但是是否返回error取决于 writeConcern的级别设置

    上面的时序图就是 writeConCern:0的执行时序图;driver调用了getLastError()之后,mongod立刻返回结果,然后才开始Apply。所以getLastError()的返回值一定是null,即使之后的Apply发生了错误,driver也不知道。使用这个级别的write concern,driver的写入调用立刻返回,所以性能是最好的,但是可靠性是最差的,因此并不推荐使用。在各平台最新版本的driver中,也不再以0作为默认级别。其实还有一个w:-1的级别,是error ignored,基本上和w:0差不多。-1不捕捉任何错误  0捕捉netWork错误;

    writeConCern我们暂且叫“写关注” ;写关注主要作用是在操作性能和数据安全性之间的抉择;

     writeConCern:1

124743_G1e7_1249631.png

    分析:当写关注为1的时候;我们发送的请求的响应是在apply操作之后,这样如果数据真实存储开始请求到真实存储之间发生任何错误都会捕捉返回给LastError文档;这样数据存储才会有可靠性;但是由于是在apply之后,所以操作性能(应用性能不能MongDB性能)就会下降;此方式 是MongDB默认的writeConcern级别

    writeConcern:1&j:true(j jouranl)         

    125916_qU6k_1249631.png

        分析:有些人认为write:1是数据安全的;但是其实不然;MongDB的apply其实是把数据写入到内存中;内存中的数据都是瞬时数据,非持久化数据;MongDB采用的是先把数据写入到内存中然后按照一定的策略sync到硬盘;(可配置 后面介绍);当我们writeConcern:1 我们会把数据写入到内存  但是内存数据是否sync到硬盘我们不得而知;上面时序图助攻的write to journal的作用就是把数据写入journal文件;当mongdb非正常down机,重启mongdb后可根据journal数据来还原写操作;(journal在64位机器上默认是开启 32位需要手动命令开启)

        writeConcern:2

                        暂时还没弄明白(弄明白了在补充记录吧)

        总结:写关注 主要是在于对于数据的安全和性能之间的权衡; writeConcern有4个级别    -1 不捕捉任何Error   0 捕捉netWorkError   1:捕捉writeError  1&j:true 捕捉写异常并且写入journal防止数据丢失   2:暂时未知;

 

5,参数-ordered

            ordered:true的时候  我们插入数组文档的时候  如果中间某一个文档元素写入出错那么后面的所有文档元素都不执行写入操作,直接把后面的所有文档元素返回;

转载于:https://my.oschina.net/ZGang/blog/493912

你可能感兴趣的文章
JM8.6中帧内帧间模式的选择
查看>>
测试覆盖率工具:EclEmma
查看>>
《CLR via C#》读书笔记 之 基元类型、引用类型和值类型
查看>>
BOS常用代码说明
查看>>
第111天:Ajax之jQuery实现方法
查看>>
/etc/rc.d/init.d/iptables: No such file or directory 错误原因
查看>>
背包问题
查看>>
模拟地与数字地(转)
查看>>
c#加载XML文档
查看>>
COGS 2259 异化多肽——生成函数+多项式求逆
查看>>
3Sum Closest leetcode
查看>>
Docx4j替换word
查看>>
ftp prompt
查看>>
GDAL源码剖析(一)
查看>>
CCF201604试题
查看>>
ionic + cordova 配置和开发过程中的一些问题
查看>>
yii2.0-rules验证规则应用实例
查看>>
网络学习(学堂在线)
查看>>
.net如何从后台获取repeater中的控件值
查看>>
2016-12-30 PHP JS
查看>>