On this page
db.collection.insert()
在本页面
Definition
db.collection.
insert
( )- 将一个或多个文档插入集合中。
insert()方法具有以下语法:
在 2.6 版中进行了更改。
db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolean>
}
)
Parameter | Type | Description |
---|---|---|
document |
文件或阵列 | 要插入集合的文档或文档数组。 |
writeConcern |
document | 可选的。表示write concern的文档。省略使用默认的写关注。参见Write Concern。 |
2.6 版中的新功能。
| ordered
|布尔值|可选。如果true
,请按 Sequences 在数组中插入文档,并且如果其中一个文档发生错误,则 MongoDB 将返回而不处理数组中的其余文档。
如果false
,则执行无序插入,并且如果其中一个文档发生错误,请 continue 处理数组中的其余文档。
默认为true
。
2.6 版中的新功能。
在 2.6 版中进行了更改:insert()返回一个包含操作状态的对象。
返回: | 一个WriteResult对象,用于单个插入。 用于批量插入的BulkWriteResult对象。 |
---|
Behaviors
Write Concern
在 2.6 版中进行了更改。
insert()方法使用insert命令,该命令使用默认的write concern。要指定其他写关注点,请在 options 参数中包括写关注点。
Create Collection
如果该集合不存在,则insert()方法将创建该集合。
_id Field
如果文档未指定_id字段,则 MongoDB 将添加_id
字段并为文档分配唯一的ObjectId,然后再插入。大多数驱动程序会创建一个 ObjectId 并插入_id
字段,但如果驱动程序或应用程序未创建,则mongod将创建并填充_id
。
如果文档包含_id
字段,则_id
值在集合中必须唯一,以避免重复的键错误。
Examples
以下示例将文档插入products
集合。如果该集合不存在,则insert()方法创建该集合。
插入文档而不指定_id 字段
在以下示例中,传递给insert()方法的文档不包含_id
字段:
db.products.insert( { item: "card", qty: 15 } )
在插入过程中,mongod将创建_id
字段,并为其指定一个唯一的ObjectId值,这由插入的文档验证:
{ "_id" : ObjectId("5063114bd386d8fadbd6b004"), "item" : "card", "qty" : 15 }
ObjectId
值特定于机器和运行操作的时间。因此,您的值可能与示例中的值不同。
插入指定_id 字段的文档
在下面的示例中,传递给insert()方法的文档包括_id
字段。 _id
的值在集合中必须唯一,以避免重复的键错误。
db.products.insert( { _id: 10, item: "box", qty: 20 } )
该操作将以下文档插入products
集合:
{ "_id" : 10, "item" : "box", "qty" : 20 }
插入多个文档
下面的示例通过将文档数组传递给insert()方法来执行三个文档的批量插入。默认情况下,MongoDB 执行“有序”插入。对于* ordered *插入,如果在插入其中一个文档期间发生错误,则 MongoDB 会返回错误,而不会处理数组中的其余文档。
数组中的文档不需要具有相同的字段。例如,数组中的第一个文档具有_id
字段和type
字段。由于第二和第三文档不包含_id
字段,因此mongod将在插入期间为第二和第三文档创建_id
字段:
db.products.insert(
[
{ _id: 11, item: "pencil", qty: 50, type: "no.2" },
{ item: "pen", qty: 20 },
{ item: "eraser", qty: 25 }
]
)
该操作插入了以下三个文档:
{ "_id" : 11, "item" : "pencil", "qty" : 50, "type" : "no.2" }
{ "_id" : ObjectId("51e0373c6f35bd826f47e9a0"), "item" : "pen", "qty" : 20 }
{ "_id" : ObjectId("51e0373c6f35bd826f47e9a1"), "item" : "eraser", "qty" : 25 }
执行无序插入
以下示例对三个文档执行“无序”插入。对于* unordered *插入,如果在插入一个文档中发生错误,MongoDB 会 continue 将其余文档插入数组中。
db.products.insert(
[
{ _id: 20, item: "lamp", qty: 50, type: "desk" },
{ _id: 21, item: "lamp", qty: 20, type: "floor" },
{ _id: 22, item: "bulk", qty: 100 }
],
{ ordered: false }
)
覆盖默认写问题
对副本集的以下操作指定"w: majority"
的write concern和wtimeout
的 5000 毫秒,以使该方法在写入传播到大多数有表决权的副本集成员之后返回,或者该方法在 5 秒钟后超时。
在版本 3.0 中进行了更改:在以前的版本中,majority
引用了副本集的所有成员的大多数,而不是多数投票成员。
db.products.insert(
{ item: "envelopes", qty : 100, type: "Clasp" },
{ writeConcern: { w: "majority", wtimeout: 5000 } }
)
WriteResult
在 2.6 版中进行了更改。
当传递单个文档时,insert()返回一个WriteResult
对象。
Successful Results
insert()返回包含操作状态的WriteResult对象。成功后,WriteResult对象包含有关插入的文档数的信息:
WriteResult({ "nInserted" : 1 })
写关注错误
如果insert()方法遇到写关注错误,则结果包括WriteResult.writeConcernError字段:
WriteResult({
"nInserted" : 1,
"writeConcernError" : {
"code" : 64,
"errmsg" : "waiting for replication timed out at shard-a"
}
})
与写入问题无关的错误
如果insert()方法遇到非写关注错误,则结果包括WriteResult.writeError字段:
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.foo.$_id_ dup key: { : 1.0 }"
}
})
BulkWriteResult
在 2.6 版中进行了更改。
传递文档数组时,insert()返回BulkWriteResult()对象。有关详细信息,请参见BulkWriteResult()。