我已经在我的Collection 中配置了一个搜索索引,并实现了以下查询:

问题1:一个问题:

db.productDimensions.explain().aggregate([{
    $search: {
      "text": {
        "path": "name",
        "query": "productName"
      }
    }
  },
  {$sort: { name: 1 }}
]);

问题2:你是什么意思?

db.productDimensions.explain("executionStats").aggregate([{
  "$search": {
    "text": {
      "path": "name",
      "query": "productName"
    },
    "sort": {
      unused: {$meta: "searchScore"},
      "name": 1,
    }
  }
}]);

在用explain()执行这些查询时,我注意到没有winningPlan字段.如何验证搜索索引是否被使用?我的理解是,winningPlan通常表示是否使用了指数.如果这个假设不正确,我如何确定搜索索引是否确实被使用?

推荐答案

$search是一个特定于GASAS的聚合流水线阶段.它不是一个核心的MongoDB函数,而是绑定到ElasticSearch sidecar.

如果$seach是管道中的第一阶段,Atlas会将其转换为ES查询,检索数据并将其传递到下一阶段. 它不是查询规划器的主题,因为$search索引不是原生的MongoDb索引,并且只要$search stage包含在管道中,该索引总是被使用.

Mongodb相关问答推荐

geoLocation或geoNear为坐标和半径使用let变量

联接不返回具有ObjectId和非ObjectId的结果

MongoDB 根据最新日期查询多个不同的值

如何为具有相同名称的嵌套字段创建文本索引

可变用户 Select

_id 和 $oid 的区别; mongo 数据库中的 $date 和 IsoDate

MongoDB 列表 - 获取每第 N 个元素

MongoDB 更改流副本集限制

使用模拟 MongoDB 服务器进行单元测试

如何使用 C# MongoDB 驱动程序检索字段子集?

删除嵌套文档数组中的嵌入文档

Mongodb插入没有_id字段的文档

MongoDB 1.6.5:如何重命名集合中的字段

Mongoose 和新架构:返回ReferenceError: Schema is not defined

MongoDB 日志(log)文件和 oplog 有何不同?

如何使用node.js http服务器从mongodb返回大量行?

初创公司应该考虑哪些数据库系统?

判断 mongoDB 是否连接

单个语句中的多个 mongo 更新运算符?

使用 C# 聚合 $lookup