Query Optimization / Enhance Read and Write Operations
Code Summary: Optimizing Read Operations by Using Query Settings
Use setQuerySettings to Specify an Index
Here’s an example of using the setQuerySettings
to specify an index by including it in the array of allowedIndexes
:
db.adminCommand({
setQuerySettings: {
find: "listingsAndReviews",
filter: {
minimum_nights: { $lte: 3 },
property_type: 'House',
room_type: 'Entire home/apt'
},
$db: 'sample_airbnb'
},
settings: {
indexHints: {
ns: {
db: 'sample_airbnb',
coll: 'listingsAndReviews'
},
allowedIndexes:
['property_type_1_room_type_1_minimum_nights_1' ]
}
}
})
Use setQuerySettings to Restrict Indexes
Here’s an example of using the setQuerySettings
to exclude an index by not including it in the array of allowedIndexes
:
db.adminCommand({
setQuerySettings: {
find: "listingsAndReviews",
filter: {
minimum_nights: { $lte: 3 },
property_type: 'House',
room_type: 'Entire home/apt'
},
$db: 'sample_airbnb'
},
settings: {
indexHints: {
ns: {
db: 'sample_airbnb',
coll: 'listingsAndReviews'
},
allowedIndexes: [
'property_type_1_minimum_nights_1',
'room_type_1_minimum_nights_1',
'minimum_nights_1'
]
}
}
})
Remove Query Settings with the removeQuerySettings
Command
Supply the Query Shape
You can remove query settings by supplying the query shape to the removeQuerySettings
command. Here’s an example:
db.adminCommand({
removeQuerySettings: {
find: "listingsAndReviews",
filter: {
minimum_nights: { $lte: 3 },
property_type: 'House',
room_type: 'Entire home/apt'
},
$db: 'sample_airbnb'
}
})
Supply the Query Hash
You can also remove query settings by supplying the query shape hash to the removeQuerySettings
command.
To retrieve the query shape hash, run the following command to retrieve all of the querySettings:
db.aggregate([{ $querySettings: {} }])
[
{
queryShapeHash: 'C1EC3943F5F3A1613406BABFE2D3687B1D83889450A62CC5F476BDC8EB5368AE',
settings: {
indexHints: [
{
ns: { db: 'sample_airbnb', coll: 'listingsAndReviews' },
allowedIndexes: [
'property_type_1_minimum_nights_1',
'room_type_1_minimum_nights_1',
'minimum_nights_1'
]
}
]
},
representativeQuery: {
find: 'listingsAndReviews',
filter: {
minimum_nights: { '$lte': 3 },
property_type: 'House',
room_type: 'Entire home/apt'
},
'$db': 'sample_airbnb'
}
}
]
Once you have the query shape hash, you can remove the query settings as seen in this example:
db.adminCommand({
removeQuerySettings:
'C1EC3943F5F3A1613406BABFE2D3687B1D83889450A62CC5F476BDC8EB5368AE'
}
})