CRUD之C--创建

本文最后更新于 2025年4月17日 早上

MongoDB的创建命令主要是Insert这个关键词,具体来说有insertOne,insertMany,insert这三个。顾名思义,insertOne是插入一个文档,insertMany是插入多个文档,insert则是插入的本义,可以一个也可以多个。

MongoDB插入文档时,有一个特殊字段是`_id`用于作为主键,以上三个命令如果不指定`_id`,则会默认插入一个类型为`ObjectID`的值作为`_id`的字段值。

关于插入,官方也有相应的文档(可能要科学上网)做介绍,以MongoDB的4.4版为例,点击访问插入文档

基本方法

insertOne

语法

1
2
3
4
5
6
db.collection.insertOne(
<document>,
{
writeConcern: <document>
}
)

第一个参数是单个文档,第二个参数是可选项,其中WriteConcert默认值似乎与acknowledge有关,而关于这个acknowledge是啥,目前我还不太清楚。

返回值

返回一个文档,包含两个信息,一是acknowledged的布尔值,一个是插入的数据的_id字段值。

insertMany

语法

1
2
3
4
5
6
7
db.collection.insertMany(
[ <document 1> , <document 2>, ... ],
{
writeConcern: <document>,
ordered: <boolean>
}
)

第一个参数是数组了,这点与insertOne不同,第二个参数也是可选项,其中的writeConcerninsertOne一样,而ordered则是指示是否是按顺序插入,它的影响是如果插入的多个文档中有一个无法插入(比如_id字段冲突了),是否影响其他的文档的插入。true则可能影响(因为按顺序插入),false则不影响。

返回值

返回一个文档,包含两个信息,一个是acknowledged的布尔值,一个是一个_id数组,包含所有成功插入的文档的_id值。

insert

语法

1
2
3
4
5
6
7
db.collection.insert(
<document or array of documents>,
{
writeConcern: <document>,
ordered: <boolean>
}
)

两个参数,第一个参数既可以是单个文档,也可以是一个文档数组;第二个参数与insertMany相似。

返回值

根据插入的类型不同返回不同的结果。

单个文档,返回插入的数据,1为插入成功,0为失败。比如:

1
WriteResult({ "nInserted" : 1 })

多个文档,返回一个BulkWriteResult,反馈插入情况。比如:

1
2
3
4
5
6
7
8
9
10
11
BulkWriteResult({
"writeErrors" : [ ],
"writeConcernErrors" : [ ],
"nInserted" : 2,
"nUpserted" : 0,
"nMatched" : 0,
"nModified" : 0,
"nRemoved" : 0,
"upserted" : [ ]
})

其他涉及到插入的方法

使用特殊参数后

有一些方法会有upsert参数,当值为true时则会产生插入效果,这些方法有:

db.collection.update()

db.collection.updateOne()

db.collection.updateMany()

db.collection.findAndModify()

db.collection.findOneAndUpdate()

db.collection.findOneAndReplace()

而一些方法直接就会产生写入效果,这些方法有:

db.collection.save()

db.collection.bulkWrite()


CRUD之C--创建
https://www.xiebingyuan.cn/2021/12/7e9cb5385302/
作者
bingyuan
发布于
2021年12月5日
更新于
2025年4月17日
许可协议