基于在 mongodb 中更改 find/query 的批量更新
bulk update based on changing find/query in mongodb
在 MongoDB 中,我知道可以像这样进行批量更新:
bulk.find( { status: "D" } ).update( { $set: { status: "I", points: "0" } } );
这将匹配 "status" 为 "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" } } );
是的,这当然是可能的,而且主要是 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" } } );
这些操作实际上是"queued"或"batched"在一条尚未在服务器上执行的指令中。
只有当您实际调用该指令时,才会将操作发送到服务器并在服务器上执行:
bulk.execute()
响应将包含操作的结果以及可能的任何错误,具体取决于 initializeOrderedBulkOp()
or initializeUnonderedBulkOp()
是否是被调用以初始化批量操作的操作。
请注意,一旦 .execute()
被调用,您需要在添加更多操作之前重新初始化并再次调用 .execute()
,因为它会有效地 "drain" 操作队列。
在 MongoDB 中,我知道可以像这样进行批量更新:
bulk.find( { status: "D" } ).update( { $set: { status: "I", points: "0" } } );
这将匹配 "status" 为 "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" } } );
是的,这当然是可能的,而且主要是 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" } } );
这些操作实际上是"queued"或"batched"在一条尚未在服务器上执行的指令中。
只有当您实际调用该指令时,才会将操作发送到服务器并在服务器上执行:
bulk.execute()
响应将包含操作的结果以及可能的任何错误,具体取决于 initializeOrderedBulkOp()
or initializeUnonderedBulkOp()
是否是被调用以初始化批量操作的操作。
请注意,一旦 .execute()
被调用,您需要在添加更多操作之前重新初始化并再次调用 .execute()
,因为它会有效地 "drain" 操作队列。