本文介绍 MongoDB 中批量写操作,详细内容参考 bulkWrite
db.collection.bulkWrite()
db.collection.bulkWrite(),方法传入一个写操作的数组,然后执行里面的每一个写操作,默认按顺序执行。支持的写操作包含:insertOne,updateOne,updateMany,deleteOne,deleteMany,replaceOne。
语法
db.collection.bulkWrite(
[ <operation 1>, <operation 2>, ... ],
{
writeConcern : <document>,
ordered : <boolean>
}
)
ordered
The ordered parameter specifies whether bulkWrite() will execute operations in order or not. By default, operations are executed in order.ordered 参数表示 bulkWrite() 是否按照顺序执行写操作,默认情况下 ordered 为 true。
- 顺序执行示例,MongoDB 按顺序执行写操作,如果其中有写操作出现异常,将直接返回,不处理剩余的写操作。
db.collection.bulkWrite(
[
{ insertOne : <document> },
{ updateOne : <document> },
{ updateMany : <document> },
{ replaceOne : <document> },
{ deleteOne : <document> },
{ deleteMany : <document> }
]
)
- 无序执行示例。
db.collection.bulkWrite(
[
{ insertOne : <document> },
{ updateOne : <document> },
{ updateMany : <document> },
{ replaceOne : <document> },
{ deleteOne : <document> },
{ deleteMany : <document> }
],
{ ordered : false }
)
如果 ordered 设置为 false,上面示例执行的结果可能会千差万别。举个例子,deleteMany 在 insertOne 前面执行和后面执行最终的结果是完全不一样的。
批量操作的数量不能超过数据库的 maxWriteBatchSize,MongoDB 3.6版本中这个数字是 100000。
示例
insertOne
db.collection.bulkWrite( [
{ insertOne : { "document" : <document> } }
] )
updateOne
db.collection.bulkWrite( [
{ updateOne :
{
"filter": <document>,
"update": <document or pipeline>, // Changed in 4.2
"upsert": <boolean>,
"collation": <document>, // Available starting in 3.4
"arrayFilters": [ <filterdocument1>, ... ], // Available starting in 3.6
"hint": <document|string> // Available starting in 4.2.1
}
}
] )
updateMany
db.collection.bulkWrite( [
{ updateMany :
{
"filter" : <document>,
"update" : <document or pipeline>, // Changed in MongoDB 4.2
"upsert" : <boolean>,
"collation": <document>, // Available starting in 3.4
"arrayFilters": [ <filterdocument1>, ... ], // Available starting in 3.6
"hint": <document|string> // Available starting in 4.2.1
}
}
] )
replaceOne
db.collection.bulkWrite([
{ replaceOne :
{
"filter" : <document>,
"replacement" : <document>,
"upsert" : <boolean>,
"collation": <document>, // Available starting in 3.4
"hint": <document|string> // Available starting in 4.2.1
}
}
] )
deleteOne
db.collection.bulkWrite([
{ deleteOne : {
"filter" : <document>,
"collation" : <document> // Available starting in 3.4
} }
] )
deleteMany
db.collection.bulkWrite([
{ deleteMany: {
"filter" : <document>,
"collation" : <document> // Available starting in 3.4
} }
] )