1

在 MongoDB 中,我知道可以像这样进行批量更新:

bulk.find( { status: "D" } ).update( { $set: { status: "I", points: "0" } } );

这将匹配“状态”为“D”的所有文档。

find是否可以在零件总是在变化的情况下执行类似的操作?

换句话说,我可以在一次操作中完成这一切吗?

bulk.find( { status: "A" } ).update( { $set: { status: "X", points: "1" } } );
bulk.find( { status: "B" } ).update( { $set: { status: "Y", points: "2" } } );
bulk.find( { status: "C" } ).update( { $set: { status: "Z", points: "3" } } );
4

1 回答 1

0

是的,当然这是可能的,并且在很大程度上是Bulk()操作的重点。

您的列表中实际发生的情况:

bulk.find( { status: "A" } ).update( { $set: { status: "X", points: "1" } } );
bulk.find( { status: "B" } ).update( { $set: { status: "Y", points: "2" } } );
bulk.find( { status: "C" } ).update( { $set: { status: "Z", points: "3" } } );

这些操作实际上是在尚未在服务器上执行的指令中“排队”或“批处理”的。

只有当您实际调用指令时,才会将操作发送到服务器并在服务器上执行:

bulk.execute()

响应将包含操作的结果以及可能的任何错误,具体取决于是否initializeOrderedBulkOp()调用initializeUnonderedBulkOp()了用于初始化批量操作的操作。

请注意,一旦.execute()被调用,您需要在添加更多操作并再次调用之前重新初始化,.execute()因为它会有效地“耗尽”操作队列。

于 2015-05-25T01:27:20.233 回答