参考 > 参考 > mongo Shell方法 > 收集方法 > db.collection.insert()
在本页面
db.collection.
insert
()¶mongo
壳法
此页面记录了mongo
shell方法,并且
没有引用MongoDB Node.js驱动程序(或任何其他驱动程序)方法。对于相应的MongoDB驱动程序API,请改为参考您特定的
MongoDB驱动程序文档。
将一个或多个文档插入集合中。
该insert()
方法具有以下语法:
参数 | 类型 | 描述 |
---|---|---|
document |
文件或阵列 | 要插入集合的文档或文档数组。 |
writeConcern |
文献 | 可选的。表达书面关切的文件。省略使用默认的写关注。请参阅写关注点。 如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。 |
ordered |
布尔值 | 可选的。如果为 如果为 默认为 |
该insert()
返回包含操作的状态的对象。
返回值: |
|
---|
_id
字段¶如果文档未指定_id字段,则MongoDB将添加该_id
字段并ObjectId
为文档分配唯一的位置
,然后再进行插入。大多数驱动程序会创建一个ObjectId并插入_id
字段,但
如果驱动程序或应用程序未mongod
创建,则会创建并填充_id
。
如果文档包含一个_id
字段,则该_id
值在集合中必须唯一,以避免重复的键错误。
db.collection.insert()
可以在多文档交易中使用。
集合必须已经存在。事务中不允许执行会导致创建新集合的插入操作。
如果在事务中运行,则不要为操作明确设置写关注点。要对事务使用写关注,请参见 事务和写关注。
重要
在大多数情况下,与单文档写入相比,多文档事务产生的性能成本更高,并且多文档事务的可用性不应代替有效的架构设计。在许多情况下, 非规范化数据模型(嵌入式文档和数组)对于您的数据和用例将继续是最佳的。也就是说,在许多情况下,对数据进行适当的建模将最大程度地减少对多文档交易的需求。
有关其他事务使用方面的注意事项(例如运行时限制和oplog大小限制),另请参见 生产注意事项。
以下示例将文档插入products
集合中。如果该集合不存在,则该
insert()
方法将创建该集合。
_id
字段¶在以下示例中,传递给该insert()
方法的文档
不包含该_id
字段:
在插入过程中,mongod
将创建该_id
字段并为其指定一个唯一ObjectId
值,该值已由插入的文档验证:
这些ObjectId
值特定于机器和运行该操作的时间。因此,您的值可能与示例中的值不同。
下面的示例通过将文档数组传递给该insert()
方法来执行三个文档的批量插入。默认情况下,MongoDB执行有序插入。对于
有序插入,如果在插入其中一个文档期间发生错误,则MongoDB会返回错误,而不会处理数组中的其余文档。
数组中的文档不需要具有相同的字段。例如,数组中的第一个文档具有一个_id
字段和一个
type
字段。由于第二和第三文档不包含_id
字段,因此mongod
将_id
在插入期间为第二和第三文档创建该字段:
该操作插入了以下三个文档:
下面的示例执行三个文档的无序插入。对于无序插入,如果在插入其中一个文档期间发生错误,MongoDB会继续将其余文档插入阵列中。
当传递单个文档时,insert()
返回一个WriteResult
对象。
将insert()
返回WriteResult
一个包含操作的状态对象。成功后,该
WriteResult
对象将包含有关插入的文档数的信息:
如果该insert()
方法遇到写关注错误,则结果包括以下
WriteResult.writeConcernError
字段:
传递文档数组时,insert()
返回一个BulkWriteResult()
对象。有关BulkWriteResult()
详细信息,请参见
。