定义
8.0版本新增。
返回之前使用 setQuerySettings
添加的查询设置。这些设置将应用于整个集群。在关闭之后,集群将保留这些设置。
语法
如果使用多个管道阶段,请首先将 $querySettings
放在管道中。
db.aggregate( [ { $querySettings: { showDebugQueryShape: <boolean> } }, // Add any additional pipeline stages after $querySettings ... ] )
命令字段
$querySettings
采用此字段:
示例
以下示例将创建一个集合、添加查询设置并返回设置:
创建示例集合和索引
运行:
// Create pizzaOrders collection db.pizzaOrders.insertMany( [ { _id: 0, type: "pepperoni", totalNumber: 5, orderDate: new Date( "2024-01-15T12:00:00Z" ) }, { _id: 1, type: "cheese", totalNumber: 15, orderDate: new Date( "2024-01-23T11:12:32Z" ) }, { _id: 2, type: "vegan", totalNumber: 20, orderDate: new Date( "2024-03-20T10:01:12Z" ) } ] ) // Create ascending index on orderDate field db.pizzaOrders.createIndex( { orderDate: 1 } ) // Create ascending index on totalNumber field db.pizzaOrders.createIndex( { totalNumber: 1 } )
索引的默认名称为 orderDate_1
和 totalNumber_1
。
添加查询设置
如下 setQuerySettings
示例将添加查询设置:
db.adminCommand( { setQuerySettings: { find: "pizzaOrders", filter: { orderDate: { $gt: ISODate( "2024-01-20T00:00:00Z" ) } }, sort: { totalNumber: 1 }, $db: "test" }, settings: { indexHints: { ns: { db: "test", coll: "pizzaOrders" }, allowedIndexes: [ "orderDate_1" ] }, queryFramework: "classic", comment: "Index hint for orderDate_1 index to improve query performance" } } )
comment
字段从MongoDB 8.0.4 开始可用。
返回查询设置
如下示例使用聚合管道中的 $querySettings
阶段返回查询设置:
db.aggregate( [ { $querySettings: { showDebugQueryShape: true } } ] )
由于 showDebugQueryShape
为 true
,因此输出中包含 debugQueryShape
文档。可以使用 queryShapeHash
标识符查找查询设置。此输出中突出显示了 queryShapeHash
和 debugQueryShape
:
[ { queryShapeHash: 'AB8ECADEE8F0EB0F447A30744EB4813AE7E0BFEF523B0870CA10FCBC87F5D8F1', settings: { indexHints: [ { ns: { db: 'test', coll: 'pizzaOrders' }, allowedIndexes: [ 'orderDate_1' ] } ], queryFramework: 'classic', comment: 'Index hint for orderDate_1 index to improve query performance' }, representativeQuery: { find: 'pizzaOrders', filter: { orderDate: { '$gt': ISODate('2023-01-20T00:00:00.000Z') } }, sort: { totalNumber: 1 }, '$db': 'test' }, debugQueryShape: { cmdNs: { db: 'test', coll: 'pizzaOrders' }, command: 'find', filter: { orderDate: { '$gt': '?date' } }, sort: { totalNumber: 1 } } } ]
本页上的 Node.js 示例使用sample_mflix
Atlas示例数据集中的 数据库。要学习;了解如何创建免费的MongoDB Atlas 群集并加载示例数据集,请参阅入门 MongoDB Node.js驾驶员文档中的。
要使用MongoDB Node.js驾驶员将 $querySettings
阶段添加到聚合管道,请在管道对象中使用 $querySettings
操作符。
要使用 $querySettings
阶段,必须首先向集合添加索引和querySettings
。
以下代码将在 movies
集合上插入两个索引:
const year = collection.createIndex({ year: 1 }); const title = collection.createIndex({ title: 1 });
以下代码将查询设置添加到 movies
集合中:
const command = { setQuerySettings: { find: "movies", filter: { year: { $gt: 2011 } }, sort: { title: 1 }, $db: "sample_mflix" }, settings: { indexHints: { ns: { db: "sample_mflix", coll: "movies" }, allowedIndexes: [ "year_1" ] }, queryFramework: "classic", comment: "Index hint for year_1 index to improve query performance" } }; const adminDb = client.db("admin"); const result = adminDb.command(command);
以下示例创建了一个管道阶段,该阶段返回之前为 movies
集合添加的查询设置。该示例将 showDebugQueryShape
选项设置为 true
,以在输出中包含 debugQueryShape
文档。然后,该示例运行聚合管道:
const pipeline = [ { $querySettings: {showDebugQueryShape: true} } ]; const cursor = adminDb.aggregate(pipeline); return cursor;