文档菜单
文档首页
/
MongoDB 手册
/ / /

db.collection.insertOne()

本页内容

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 示例

MongoDB与驱动程序

本页文档了一个mongosh方法。要查看特定编程语言的相应驱动程序中的等效方法,请参阅相应页面的内容

C#Java SyncNode.jsPyMongoCC++GoJava RSKotlin CoroutineKotlin SyncPHPMongoidRustScala
db.collection.insertOne()

将单个文档插入到集合中。

返回:包含以下内容的文档
  • 一个布尔值 acknowledged,如果操作在具有 write-concern 的条件下运行则为 true,如果禁用了写关注则为 false写关注

  • 一个字段 insertedId,包含插入文档的 _id 值。

此方法在以下环境中提供

注意

此命令支持所有MongoDB Atlas集群。有关Atlas对所有命令的支持信息,请参阅不受支持的命令。

insertOne() 方法具有以下形式

db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)

insertOne() 方法接受以下参数

参数
类型
描述
document
document
要插入到集合中的文档。
writeConcern
document
可选。表示 write concern 的文档。省略则使用默认的write concern。.. include:: /includes/extracts/transactions-operations-write-concern.rst

如果集合不存在,则 insertOne() 方法将创建该集合。

如果文档未指定 _id 字段,则 mongod 将添加 _id 字段并为文档分配一个唯一的 ObjectId(),然后在插入之前。大多数驱动程序都会创建一个 ObjectId 并插入 _id 字段,但如果驱动程序或应用程序没有做,则 mongod 将创建并填充 _id

如果文档包含 _id 字段,则该 _id 值必须在集合内是唯一的,以避免重复键错误。

insertOne()db.collection.explain() 不兼容。

当发生错误时,db.collection.insertOne()将抛出writeErrorwriteConcernError异常。

如果你的集合使用模式验证并且将validationAction设置为error,则插入无效文档会抛出MongoServerError,并且db.collection.insertOne()失败。

db.collection.insertOne()可以在分布式事务中使用。

重要

在大多数情况下,分布式事务相对于单文档写入会带来更高的性能开销,分布式事务的可用性不应替代有效的模式设计。对于许多场景,非规范化数据模型(嵌入文档和数组)将继续适用于您的数据和用例。也就是说,对于许多场景,适当地建模您的数据将最大限度地减少对分布式事务的需求。

有关额外的事务使用考虑因素(例如运行时限制和oplog大小限制),请参阅生产注意事项。

如果事务不是跨分片写事务,则可以在分布式事务中创建集合和索引。是跨分片写事务。

如果在事务中指定对非现有集合的插入,MongoDB会隐式地创建该集合。

提示

另请参阅

如果在一个事务中运行操作,不要明确设置写入关注点。有关使用事务与写入关注点的信息,请参阅事务和写入关注点。

如果 db.collection.insertOne() 操作成功插入一个文档,该操作将在 操作日志(oplog)中添加一个条目。如果操作失败,操作不会在 oplog 中添加条目。

以下示例中,传递给 insertOne() 方法的文档不包含 _id 字段

try {
db.products.insertOne( { item: "card", qty: 15 } );
} catch (e) {
print (e);
};

操作返回以下文档

{
"acknowledged" : true,
"insertedId" : ObjectId("56fc40f9d735c28df206d078")
}

因为文档中没有包含 _idmongod 将创建并添加 _id 字段,并将其分配一个唯一的 ObjectId() 值。

ObjectId 值特定于执行操作的机器和时间。因此,您的值可能与示例中的值不同。

以下示例中,传递给 insertOne() 方法的文档包含 _id 字段。为了保证不出现重复键错误,_id 的值必须在集合内唯一。

try {
db.products.insertOne( { _id: 10, item: "box", qty: 20 } );
} catch (e) {
print (e);
}

操作返回以下内容

{ "acknowledged" : true, "insertedId" : 10 }

向唯一索引(例如 _id)中的任何键插入重复值将抛出异常。以下尝试插入具有已存在 _id 值的文档

try {
db.products.insertOne( { _id: 10, "item" : "packing peanuts", "qty" : 200 } );
} catch (e) {
print (e);
}

由于 _id: 10 已存在,以下异常被抛出

WriteError({
"index" : 0,
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: inventory.products index: _id_ dup key: { : 10.0 }",
"op" : {
"_id" : 10,
"item" : "packing peanuts",
"qty" : 200
}
})

对于一个三成员副本集,以下操作指定了 wmajoritywtimeout100

try {
db.products.insertOne(
{ "item": "envelopes", "qty": 100, type: "Self-Sealing" },
{ writeConcern: { w : "majority", wtimeout : 100 } }
);
} catch (e) {
print (e);
}

如果确认所需时间超过 wtimeout 限制,将抛出以下异常

WriteConcernError({
"code" : 64,
"errmsg" : "waiting for replication timed out",
"errInfo" : {
"wtimeout" : true,
"writeConcern" : {
"w" : "majority",
"wtimeout" : 100,
"provenance" : "getLastErrorDefaults"
}
}
})

提示

另请参阅

返回

db.collection.insertMany

© . This site is unofficial and not affiliated with MongoDB, Inc.