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

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: 写入操作的超时时长,单位为毫秒,超时则返回一个错误信息。

猜你喜欢

转载自sunsetst.iteye.com/blog/2322320
今日推荐