Important
Deprecated mongosh Method
This method is deprecated in mongosh. For alternative
methods, see Compatibility Changes with Legacy mongo Shell.
Definition
db.collection.insert()Inserts a document or documents into a collection.
Returns: A WriteResult object for single inserts.
A BulkWriteResult object for bulk inserts.
Syntax
db.collection.insert() has the following
syntax:
db.collection.insert( <document or array of documents>, { writeConcern: <document>, ordered: <boolean> } )
Parameters
Parameter | Type | Description |
|---|---|---|
| document or array | A document or array of documents to insert into the collection. |
| document | Optional. A document expressing the write concern. Omit to use the default write concern. See Write Concern. Do not explicitly set the write concern for the operation if run in a transaction. To use write concern with transactions, see Transactions and Write Concern. |
| boolean | Optional. If If Defaults to |
Behaviors
Write Concern
The insert() method uses the
insert command, which uses the default write concern. To specify a different write concern,
include the write concern in the options parameter.
Collection and _id Field Creation
If the collection does not exist, then insert() creates the collection.
If the document to insert does not specify an _id field, then mongod
adds the _id field and assigns a unique
ObjectId() for the document. Most
drivers create an ObjectId and insert the _id field, but the
mongod will create and populate the _id if the driver or
application does not.
If the document contains an _id field, the _id value must be
unique within the collection to avoid duplicate key error.
Transactions
insert() can be used inside distributed transactions.
Important
In most cases, a distributed transaction incurs a greater performance cost over single document writes, and the availability of distributed transactions should not be a replacement for effective schema design. For many scenarios, the denormalized data model (embedded documents and arrays) will continue to be optimal for your data and use cases. That is, for many scenarios, modeling your data appropriately will minimize the need for distributed transactions.
For additional transactions usage considerations (such as runtime limit and oplog size limit), see also Production Considerations.
Collection Creation in Transactions
You can create collections and indexes inside a distributed transaction if the transaction is not a cross-shard write transaction.
If you specify an insert on a non-existing collection in a transaction, MongoDB creates the collection implicitly.
Write Concerns and Transactions
Do not explicitly set the write concern for the operation if run in a transaction. To use write concern with transactions, see Transactions and Write Concern.
Oplog Entries
If an insert() operation successfully inserts a document,
the operation adds an entry on the oplog (operations log).
If the operation fails, the operation does not add an entry on the
oplog.
Examples
The following examples insert documents into the products
collection. If the collection does not exist, insert() creates the collection.
Insert a Document without Specifying an _id Field
In the following example, the document passed to insert() does not contain the _id
field:
db.products.insert( { item: "card", qty: 15 } )
During the insert, mongod will create the _id field and
assign it a unique ObjectId() value, as verified by
the inserted document:
{ "_id" : ObjectId("5063114bd386d8fadbd6b004"), "item" : "card", "qty" : 15 }
The ObjectId values are specific to the machine and time when the
operation is run. As such, your values may differ from those in the
example.
Insert a Document Specifying an _id Field
In the following example, the document passed to insert() includes the _id field.
The value of _id must be unique within the collection to avoid
duplicate key error.
db.products.insert( { _id: 10, item: "box", qty: 20 } )
The operation inserts the following document in the products
collection:
{ "_id" : 10, "item" : "box", "qty" : 20 }
Insert Multiple Documents
The following example performs a bulk insert of three documents by
passing an array of documents to insert(). By default, MongoDB performs an ordered insert. With
ordered inserts, if an error occurs during an insert of one of the
documents, MongoDB returns on error without processing the remaining
documents in the array.
The documents in the array do not need to have the same fields. For
instance, the first document in the array has an _id field and a
type field. Because the second and third documents do not contain
an _id field, mongod will create the _id field for
the second and third documents during the insert:
db.products.insert( [ { _id: 11, item: "pencil", qty: 50, type: "no.2" }, { item: "pen", qty: 20 }, { item: "eraser", qty: 25 } ] )
The operation inserted the following three documents:
{ "_id" : 11, "item" : "pencil", "qty" : 50, "type" : "no.2" } { "_id" : ObjectId("51e0373c6f35bd826f47e9a0"), "item" : "pen", "qty" : 20 } { "_id" : ObjectId("51e0373c6f35bd826f47e9a1"), "item" : "eraser", "qty" : 25 }
Perform an Unordered Insert
The following example performs an unordered insert of three documents. With unordered inserts, if an error occurs during an insert of one of the documents, MongoDB continues to insert the remaining documents in the array.
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 } )
Override Default Write Concern
The following operation to a replica set specifies a write concern of w: 2 with a wtimeout of 5000
milliseconds. This operation either returns after the write propagates
to both the primary and one secondary, or times out after 5 seconds.
db.products.insert( { item: "envelopes", qty : 100, type: "Clasp" }, { writeConcern: { w: 2, j: true, wtimeout: 5000 } } )
WriteResult
When passed a single document, insert() returns a WriteResult() object.
Successful Results
Upon success, the returned WriteResult object contains information
on the number of documents inserted:
WriteResult({ "nInserted" : 1 })
Write Concern Errors
If insert() encounters write
concern errors, the results include the
WriteResult.writeConcernError field:
WriteResult({ "nInserted" : 1, "writeConcernError"({ "code" : 64, "errmsg" : "waiting for replication timed out", "errInfo" : { "wtimeout" : true, "writeConcern" : { "w" : "majority", "wtimeout" : 100, "provenance" : "getLastErrorDefaults" } } })
Errors Unrelated to Write Concern
If insert() encounters a non-write
concern error, the results include the WriteResult.writeError
field:
WriteResult({ "nInserted" : 0, "writeError" : { "code" : 11000, "errmsg" : "insertDocument :: caused by :: 11000 E11000 duplicate key error index: test.foo.$_id_ dup key: { : 1.0 }" } })
BulkWriteResult
When passed an array of documents, insert()
returns a BulkWriteResult() object.