MongoDB Bulk批量操作

MongoDB 批量方法用于执行批量操作,如批量写入和批量删除。

一、db.collection.initializeOrderBulkOp()

initializeOrderBulkOp 并为集合提供了一个新的 Bulk() 操作构建器。它构造了MongoDB的写入操作的有序列表批量运行。

下面在 users 集合上初始化 Bulk() 操作构建器,添加一系列写入操作,并执行操作:

var bulk = db.users.initializeOrderedBulkOp();  
bulk.insert( { user: "John", status: "A", points: 0 } );  
bulk.insert( { user: "Peter", status: "A", points: 0 } );  
bulk.insert( { user: "Clint", status: "B", points: 0 } );  
bulk.find( { status: "D" } ).remove();  
bulk.find( { status: "B" } ).update( { $set: { comment: "Awaited" } } );  
bulk.execute();  

二、db.collection.initializeUnorderedBulkOp()

该方法启动并为集合提供一个新的 Bulk() 操作构建器。它构造了 MongoDB 批量运行的写入操作的无序列表。

例如:

以下初始化 Bulk() 操作构建器并添加一系列插入操作以添加多个文档:

var bulk = db.users.initializeUnorderedBulkOp();  
bulk.insert( { user: "John", status: "A", points: 0 } );  
bulk.insert( { user: "Peter", status: "A", points: 0 } );  
bulk.insert( { user: "Clint", status: "B", points: 0 } );  
bulk.execute();  

三、Bulk() 方法

Bulk 方法可用于创建要为一个集合批量执行的写入操作列表。要客观化构建器,请使用

db.collection.initializeOrderedBulkOp() 

或者

db.collection.initializeUnorderedBulkOp()

Bulk() 构建器具有以下方法:

Bulk.insert() 可用于在操作列表中添加插入操作。
Bulk.find() 指定删除或更新操作的查询条件。
Bulk.find.removeOne() 将删除操作添加到单个文档的操作列表中。
Bulk.find.remove() 将删除操作添加到多个文档的操作列表中。
Bulk.find.replaceOne() 将文档替换操作添加到许多操作中。
Bulk.find.updateOne() 将单个文档更新操作添加到操作数组中。
Bulk.find.update() 将多重更新操作添加到操作数组中。
Bulk.find.upsert() 可用于指定更新操作为 true 的 upsert。
Bulk.execute() 批量执行一系列操作。
Bulk.getOperations() 给出了在 Bulk() 操作对象中执行的写操作数组。
Bulk.tojson() 返回一个 JSON 文档,其中包含 Bulk() 操作对象中的操作数和批次数。
Bulk.toString() 以字符串形式提供 Bulk.tojson() 结果。

四、Bulk.execute()方法

它运行由 Bulk() 方法构建器构建的操作列表。

例如:

执行批量方法

下面在 items 集合上初始化 Bulk() 操作构建器,添加一系列插入操作,并执行操作:

var bulk = db.items.initializeUnorderedBulkOp();  
bulk.insert( { item: "abc123", status: "A", defaultQty: 500, points: 5 } );  
bulk.insert( { item: "ijk123", status: "A", defaultQty: 100, points: 10 } );  
bulk.execute( );  
The operation returns the following BulkWriteResult() object:  
BulkWriteResult({  
   "writeErrors" : [ ],  
   "writeConcernErrors" : [ ],  
   "nInserted" : 2,  
   "nUpserted" : 0,  
   "nMatched" : 0,  
   "nModified" : 0,  
   "nRemoved" : 0,  
   "upserted" : [ ]  
})  

五、Bulk.find(<query>) 方法

它可用于指定更新或删除操作的查询条件。使用查询选择器指定查询条件以选择文档进行更新或删除操作。要指定所有文档,请使用空文档 {}。

Bulk.find() 可以与 write 命令的以下操作一起使用:

Bulk.find.removeOne()  
Bulk.find.remove()  
Bulk.find.replaceOne()  
Bulk.find.updateOne()  
Bulk.find.update()  

例如:

下面给出的示例为项目集合初始化 Bulk() 操作构建器并添加删除操作。它还将操作更新到操作列表。使用帮助 Bulk.find() 方法删除操作和更新操作,为它们各自的操作指定一个条件:

var bulk = db.items.initializeUnorderedBulkOp();  
bulk.find( { status: "D" } ).remove();  
bulk.find( { status: "P" } ).update( { $set: { points: 0 } } )  
bulk.execute();  

六、Bulk.find.remove()方法

它将删除操作添加到批量操作列表。Bulk.find() 方法可用于指定条件,该条件确定要删除的文档。Bulk.find.remove() 从集合中删除所有匹配的文档。

下面给出的示例为项目集合初始化 Bulk() 操作构建器并添加删除操作。删除操作可用于删除集合中状态等于“D”的所有文档:

var bulk = db.items.initializeUnorderedBulkOp();  
bulk.find( { status: "D" } ).remove();  
bulk.execute();  

七、Bulk.find.replaceOne(<document>) 方法

它可用于将单个文档替换操作添加到批量操作列表中。使用此方法指定确定必须替换的文档的条件。该方法将替换限制为单个文档。

完全替换现有文档的替换文档。仅包含字段和值对。

例如

下面给出的示例为项目集合初始化 Bulk() 操作构建器,并将各种 replaceOne 操作添加到操作列表中。

var bulk = db.items.initializeUnorderedBulkOp();  
bulk.find( { item: "abc123" } ).replaceOne( { item: "abc123", status: "P", points: 100 } );  
bulk.execute();  

八、Bulk.find.update(<update>) 方法

它可用于将多更新操作添加到批量操作列表。该方法更新现有文件的特定字段。

Bulk.find() 方法可用于指定确定必须更新的文档的条件。该方法更新所有匹配的文档。

例如:

以下示例为项目集合初始化 Bulk() 操作构建器,并将各种多更新操作添加到操作列表中。

var bulk = db.items.initializeUnorderedBulkOp();  
bulk.find( { status: "D" } ).update( { $set: { status: "I", points: "0" } } );  
bulk.find( { item: null } ).update( { $set: { item: "TBD" } } );  
bulk.execute();  

九、Bulk.insert(<document>)方法

它可用于将插入操作添加到批量操作列表。

例如:

该示例为 items 集合初始化 Bulk() 操作构建器,并添加一系列插入操作以添加多个文档:

var bulk = db.items.initializeUnorderedBulkOp();  
bulk.insert( { item: "abc123", defaultQty: 100, status: "A", points: 100 } );  
bulk.insert( { item: "ijk123", defaultQty: 200, status: "A", points: 200 } );  
bulk.insert( { item: "mop123", defaultQty: 0, status: "P", points: 0 } );  
bulk.execute();  

十、Bulk.toString()方法

它可用于将输出作为字符串返回 JSON 文档,其中包含 Bulk() 对象内的操作数和批次数。

例如

下面的示例在 items 集合上初始化 Bulk() 操作构建器,添加一系列写入操作,并在批量构建器对象上调用 Bulk.toString()。

var bulk = db.items.initializeOrderedBulkOp();  
bulk.insert( { item: "abc123", status: "A", defaultQty: 500, points: 5 } );  
bulk.insert( { item: "ijk123", status: "A", defaultQty: 100, points: 10 } );  
bulk.find( { status: "D" } ).removeOne();  
bulk.toString();  

热门文章

优秀文章