Tip
MongoDB también proporciona el método Mongo.bulkWrite() para realizar operaciones de guardar masiva.
Descripción
Bulk.find.hint()Establece la opción
hintque especifica el índice para soportar elBulk.find()para:La opción puede tomar un documento de especificación de índice o la string de nombre de índice.
Si especifica un índice que no existe, la operación genera un error.
Bulk.find.hint()no tiene efecto enBulk.find.removeOne()
Compatibilidad
Este comando está disponible en implementaciones alojadas en los siguientes entornos:
- MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube
Nota
This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.
Ejemplo
Crear una colección de ejemplo orders:
db.orders.insertMany( [ { "_id" : 1, "item" : "abc", "price" : Decimal128("12"), "quantity" : 2, "type": "apparel" }, { "_id" : 2, "item" : "jkl", "price" : Decimal128("20"), "quantity" : 1, "type": "electronics" }, { "_id" : 3, "item" : "abc", "price" : Decimal128("10"), "quantity" : 5, "type": "apparel" }, { "_id" : 4, "item" : "abc", "price" : Decimal128("8"), "quantity" : 10, "type": "apparel" }, { "_id" : 5, "item" : "jkl", "price" : Decimal128("15"), "quantity" : 15, "type": "electronics" } ] )
Crea los siguientes índices en la colección de ejemplo:
db.orders.createIndex( { item: 1 } ); db.orders.createIndex( { item: 1, quantity: 1 } ); db.orders.createIndex( { item: 1, price: 1 } );
Las siguientes operaciones masivas especifican diferentes índices a utilizar para las diversas operaciones de actualización/reemplazo de documentos:
var bulk = db.orders.initializeUnorderedBulkOp(); bulk.find({ item: "abc", price: { $gte: Decimal128("10") }, quantity: { $lte: 10 } }).hint({item: 1, quantity: 1}).replaceOne( { item: "abc123", status: "P", points: 100 } ); bulk.find({ item: "abc", price: { $gte: Decimal128("10") }, quantity: { $lte: 10 } }).hint({item: 1, price: 1}).updateOne( { $inc: { points: 10 } } ); bulk.execute();
Para ver los índices utilizados, puede usar el pipeline $indexStats:
db.orders.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )