bulkWrite 与 initialize(Un)orderedBulkOp
bulkWrite vs initialize(Un)orderedBulkOp
这两种方法有什么区别,我应该使用哪种?
- initializeUnorderedBulkOp 和 bulkWrite 与 ordered: false 之间的区别是什么
- initializeOrderedBulkOp 和 default bulkWrite 之间的区别是什么
https://docs.mongodb.com/manual/reference/method/db.collection.initializeUnorderedBulkOp/
https://docs.mongodb.com/manual/reference/method/db.collection.initializeOrderedBulkOp/
TL;DR
区别主要在于用法。 bulkWrite
接收一组操作并 立即执行它.
initializeOrderedBulkOp
and initializeUnorderedBulkOp
return 可用于逐步构建查询并最终使用 execute
函数执行的实例。
派对迟到了,但我也有类似的困惑,所以做了一些挖掘。
区别在于API实现和使用。
bulkWrite
根据 API 参考,
Perform a bulkWrite operation without a fluent API
在此方法中,您直接传入一个“写入操作”数组作为第一个参数。有关示例,请参见 here。我认为 流畅 API,他们的意思是你不完全将你的 update
操作与你的 [=19] 分开 =] 操作或 delete
操作。每个操作都在一个数组中。
一个关键点是这些操作是立即执行的。
如问题中所述,默认情况下执行是有序的,但可以通过在第二个参数(一组选项)中设置 { ordered: false }
来更改为无序。
函数的 return 值为 BulkWriteResult
,其中包含有关已执行的批量操作的信息。
initializeOrderedBulkOp
and initializeUnorderedBulkOp
再次参考API参考,
Initiate an In order bulk write operation
正如这里所说,这些方法 initialize/return 一个为构建块操作提供 API 的实例 。这些实例分别属于 class OrderedBulkOperation
and UnorderedBulkOperation
。
const bulk = db.items.initializeUnorderedBulkOp();
// `bulk` is of the type UnorderedBulkOperation
这个 bulk
变量提供了一个“流畅的 API”,它允许您 构建 您在整个应用程序中的查询:
bulk.find( { /** foo **/ } ).update( { $set: { /** bar **/ } } );
请记住,这些查询 不会在上面的代码中执行 。您可以继续构建整个操作,当所有写操作都被“调用”时,我们终于可以执行查询了:
bulk.execute();
这个 execute
函数 return 是一个 BulkWriteResult
实例,基本上就是 bulkWrite
return 的实例。我们的数据库终于改好了。
你应该使用哪一个?
这取决于您的要求。
如果您想使用现有数组中的单独查询和值更新大量文档,bulkWrite
似乎很合适。如果您想通过相当复杂的业务逻辑构建您的批量操作,其他选项是有意义的。请注意,您可以通过逐渐构建全局数组并将其最后传递给 bulkWrite
.
来实现相同的目的
这两种方法有什么区别,我应该使用哪种?
- initializeUnorderedBulkOp 和 bulkWrite 与 ordered: false 之间的区别是什么
- initializeOrderedBulkOp 和 default bulkWrite 之间的区别是什么
https://docs.mongodb.com/manual/reference/method/db.collection.initializeUnorderedBulkOp/
https://docs.mongodb.com/manual/reference/method/db.collection.initializeOrderedBulkOp/
TL;DR
区别主要在于用法。 bulkWrite
接收一组操作并 立即执行它.
initializeOrderedBulkOp
and initializeUnorderedBulkOp
return 可用于逐步构建查询并最终使用 execute
函数执行的实例。
派对迟到了,但我也有类似的困惑,所以做了一些挖掘。
区别在于API实现和使用。
bulkWrite
根据 API 参考,
Perform a bulkWrite operation without a fluent API
在此方法中,您直接传入一个“写入操作”数组作为第一个参数。有关示例,请参见 here。我认为 流畅 API,他们的意思是你不完全将你的
update
操作与你的 [=19] 分开 =] 操作或delete
操作。每个操作都在一个数组中。一个关键点是这些操作是立即执行的。
如问题中所述,默认情况下执行是有序的,但可以通过在第二个参数(一组选项)中设置
{ ordered: false }
来更改为无序。函数的 return 值为
BulkWriteResult
,其中包含有关已执行的批量操作的信息。initializeOrderedBulkOp
andinitializeUnorderedBulkOp
再次参考API参考,
Initiate an In order bulk write operation
正如这里所说,这些方法 initialize/return 一个为构建块操作提供 API 的实例 。这些实例分别属于 class
OrderedBulkOperation
andUnorderedBulkOperation
。const bulk = db.items.initializeUnorderedBulkOp(); // `bulk` is of the type UnorderedBulkOperation
这个
bulk
变量提供了一个“流畅的 API”,它允许您 构建 您在整个应用程序中的查询:bulk.find( { /** foo **/ } ).update( { $set: { /** bar **/ } } );
请记住,这些查询 不会在上面的代码中执行 。您可以继续构建整个操作,当所有写操作都被“调用”时,我们终于可以执行查询了:
bulk.execute();
这个
execute
函数 return 是一个BulkWriteResult
实例,基本上就是bulkWrite
return 的实例。我们的数据库终于改好了。
你应该使用哪一个?
这取决于您的要求。
如果您想使用现有数组中的单独查询和值更新大量文档,bulkWrite
似乎很合适。如果您想通过相当复杂的业务逻辑构建您的批量操作,其他选项是有意义的。请注意,您可以通过逐渐构建全局数组并将其最后传递给 bulkWrite
.