Bulk.find.hint()
Dica
O MongoDB também fornece o método db.collection.bulkWrite()
para executar operações de gravação em massa.
Descrição
Bulk.find.hint()
Define a opção
hint
que especifica o índice para suportar oBulk.find()
para:A opção pode usar um documento de especificação de índice ou a string do nome do índice.
Se você especificar um índice que não existe, a operação emitirá erros.
Bulk.find.hint()
não tem efeito sobreBulk.find.removeOne()
Exemplo
Criar uma collection de exemplo orders
:
db.orders.insertMany( [ { "_id" : 1, "item" : "abc", "price" : NumberDecimal("12"), "quantity" : 2, "type": "apparel" }, { "_id" : 2, "item" : "jkl", "price" : NumberDecimal("20"), "quantity" : 1, "type": "electronics" }, { "_id" : 3, "item" : "abc", "price" : NumberDecimal("10"), "quantity" : 5, "type": "apparel" }, { "_id" : 4, "item" : "abc", "price" : NumberDecimal("8"), "quantity" : 10, "type": "apparel" }, { "_id" : 5, "item" : "jkl", "price" : NumberDecimal("15"), "quantity" : 15, "type": "electronics" } ] )
Crie os seguintes índices na collection de exemplo:
db.orders.createIndex( { item: 1 } ); db.orders.createIndex( { item: 1, quantity: 1 } ); db.orders.createIndex( { item: 1, price: 1 } );
As seguintes operações em massa especificam o índice diferente a ser usado para as várias operações de atualização/substituição de documento:
var bulk = db.orders.initializeUnorderedBulkOp(); bulk.find({ item: "abc", price: { $gte: NumberDecimal("10") }, quantity: { $lte: 10 } }).hint({item: 1, quantity: 1}).replaceOne( { item: "abc123", status: "P", points: 100 } ); bulk.find({ item: "abc", price: { $gte: NumberDecimal("10") }, quantity: { $lte: 10 } }).hint({item: 1, price: 1}).updateOne( { $inc: { points: 10 } } ); bulk.execute();
Para visualizar os índices usados, é possível usar o pipeline $indexStats
:
db.orders.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )