欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

向集合中插入文档(insert方法)

程序员文章站 2022-05-19 08:43:40
...

MongoDB v3.2

 

1. 方法定义

 

db.collection.insert(
   <document or array of documents>,
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

 

第一个参数可以是一个文档,也可以是一个文档数组,即insert可以同时插入多条数据

 

第二个参数是一个文档,writeConcern表示进行写入操作时数据库的响应级别,ordered是一个布尔值,若为true,按顺序插入指定数组中的document,如果其中一个document插入时出现错误,直接返回,剩下的document不再处理;若为false,会忽略错误继续插入剩下的文档。默认为true。

 

另外,在向集合插入文档时,若文档不存在,则自动创建。若插入的文档中未指定_id字段,则自动生成。

 

2. 返回值

插入单个文档,返回WriteResult对象;插入多个文档,返回BulkWriteResult对象。

 

插入成功时返回:

WriteResult({ "nInserted" : 1 })

 nInserted表示插入的数量

 

若插入时出现一个write concern错误,返回类似如下信息:

WriteResult({
   "nInserted" : 1,
   "writeConcernError" : {
      "code" : 64,
      "errmsg" : "waiting for replication timed out at shard-a"
   }
})

 

插入时出现于write concern无关的错误:

WriteResult({
   "nInserted" : 0,
   "writeError" : {
      "code" : 11000,
      "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.foo.$_id_  dup key: { : 1.0 }"
   }
})

 

3. Write Concern

用于设定写操作的响应等级

{ w: <value>, j: <boolean>, wtimeout: <number> }

 w=0: 写操作不等待服务端响应确认,即便写入失败也不会响应。但能感知到网络错误。
w=1: 能够获取到单节点或集群中主节点的响应信息。该值为默认值。
w=majority: 能够获取到集群中包括主节点在内的多个节点(voting)的响应信息,而且本次写入操作会确保记录磁盘journal,即便断电数据也不会丢失
w>1: 能够获得包括主节点在内的多个节点的响应信息,但指定的数量需与集群数量一致,否则操作会一直等待,除非设置wtimeout
j=true: 等待操作写入journal log才会返回响应,可以容忍服务器宕机。需在mongod启动时加上journaling参数确保可以使用。
wtimeout: 写入操作的超时时长,单位为毫秒,超时则返回一个错误信息。

 

相关标签: MongoDB insert