Bulk.find.hint()
Tip
Starting in version 3.2, MongoDB also provides thedb.collection.bulkWrite()
method for performing bulkwrite operations.
Description
New in version 4.2.1.
Sets the hint
option that specifies the indexto support the Bulk.find()
for:
Bulk.find.replaceOne()
Bulk.find.update()
Bulk.find.updateOne()
.The option can take an index specification document or the indexname string.
If you specify an index that does not exist, the operationerrors.
Bulk.find.hint()
has no effect on Bulk.find.removeOne()
Example
Create an example collection orders
:
- db.orders.insert([
- { "_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" }
- ])
Create the following indexes on the example collection:
- db.orders.createIndex( { item: 1 } );
- db.orders.createIndex( { item: 1, quantity: 1 } );
- db.orders.createIndex( { item: 1, price: 1 } );
The following bulk operations specify different index to use for thevarious update/replace document operations:
- 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();
To view the indexes used, you can use the $indexStats
pipeline:
- db.orders.aggregate( [ { $indexStats: { } }, { $sort: { name: 1 } } ] )
See also