英文原文地址:https://docs.mongodb.com/v3.2/tutorial/insert-documents/。
本文章属个人翻译,作个人学习之用,如有雷同,纯属巧合。如有错误之处,欢迎指正。
插入文档
插入方法
MongoDB提供了以下方法来插入文档
到集合中。
db.collection.insertOne()
db.collection.insertMany()
db.collection.insert()
该篇文章提供了几个在mongo
shell中插入文档的例子。
插入行为
创建集合
如果当时集合不存在,插入操作将创建该集合。
_id字段
在MongoDB中,存储在集合中的每个文档需要一个唯一的_id
字段作为主键
。如果插入的文档没有_id
字段,MongoDB驱动自动给_id
字段生成一个ObjectId
。
该行为也适用于通过带upset:true
选项的更新操作来插入文档的情形。
原子
在单个文档的级别,MongoDB中所有的写操作都是原子的。欲知更多关于MongoDB和原子性的信息,见 原子与事务。
db.collection.insertOne()
3.2版本新增
db.collection.insertOne()
插入单个文档
到集合中。
下面的例子插入一个新的文档到users
集合中。新文档有3个字段,name、age和status。由于该文档未指定_id字段,MongoDB会给该文档添加一个具有ObjectId值的_id字段。见 插入行为。
db.users.insertOne(
{
name: "sue",
age:19,
status: "P"
}
)
insertOne()
会返回一个文档,该文档含有所插入文档的_id字段。
要取回你刚刚插入的文档,查询该集合。
db.users.find({"name": "sue"})
欲知更多信息和例子,见 db.collection.insertOne()
。
db.collection.insertMany()
3.2版本新增
db.collection.insertMany()
插入多个文档
到集合中。
下面的例子插入3个文档到users
集合中。每个文档有3个字段,name、age和status。由于文档未指定_id字段,MongoDB给每个文档增加一个具有ObjectId值的_id字段。见 插入行为。
db.users.insertMany(
[
{name: "bob", age: 42, status: "A",},
{name: "ahn", age: 22, status: "A",},
{name: "xi", age: 34, status: "D",}
]
)
insertMany()
会返回一个文档,该文档包含每个插入文档的_id字段。
要取回插入的文档,查询该集合
db.users.find()
欲知更多信息和例子,见 db.collection.insertMany()
。
db.collection.insert()
db.collection.insert()
插入一个或多个文档到集合中。要插入单个文档,传递一个文档给该方法;要插入多个文档,传递一个文档数组给该方法。
以下例子插入一个文档到users
集合。新文档有3个字段,name、age和status。由于该文档未指定_id字段,MongoDB给该文档添加一个具有ObjectId值的_id字段。见 插入行为。
db.users.insert(
{
name: "sue",
age: 19,
status: "p"
}
)
db.collection.insert()
返回一个WriteResult
对象,提供了状态信息。
例如,一个成功的插入操作返回以下WriteResult
对象
WriteResult({ "nInserted" : 1 })
nInserted
字段表示插入的文档数目。如果插入操作遇到错误,WriteResult
对象将包含相应的错误信息。
下面的例子插入3个文档到users
集合中。每个文档有3个字段,name、age和status。由于文档并未指定_id字段,MongoDB给每个文档增加一个具有ObjectId值的_id字段。见 插入行为。
db.users.insert(
[
{name: "bob", age: 42, status: "A",},
{name: "ahn", age: 22, status: "A",},
{name: "xi", age: 34, status: "D",}
]
)
该方法返回一个包含操作状态的BulkWriteResult
对象。成功的插入文档操作将返回以下BulkWriteResult
对象:
BulkWriteResult({
"writeErrors": [],
"writeConcernErrors": [],
"nInserted": 3,
"nUPserted": 0,
"nMatched": 0,
"nModified": 0,
"nRemoved": 0,
"upserted": []
})
欲知更多信息和例子,见 db.collection.insert()
。
其他方法
以下方法也可以添加新文档到集合中:
db.collection.update()
,当使用upsert: true
选项时db.collection.updateOne()
,当使用upsert: true
选项时db.collection.updateMany()
,当使用upsert: true
选项时db.collectionl.findAndModify()
,当使用upsert: true
选项时db.collection.findOneAndUpdate()
,当使用upsert: true
选项时db.collection.findOneAndReplace()
,当使用upsert: true
选项时db.collection.save()
db.collection.bulkWrite()
欲知更多信息与例子,请查看相应方法各自的参考页面。