Azure Cosmos db 时间戳索引失败,提示“已排除排序项目”

问题描述 投票:0回答:2

我有一个集合,其中包含类似于以下内容的文档:

{
  "_id": ObjectId("5cde558555555"),
  "liftId": "b227eb28a555",
  "timestamp": 1558108800000
}

我通过

azure CLI
将以下索引策略应用于上述集合:

{
  "indexingMode": "consistent",
  "automatic": true,
  "includedPaths": [
    {
      "path": "/liftId/?",
      "indexes": [
        {
          "kind": "Hash",
          "dataType": "String",
          "precision": 3
        }
      ]
    },
    {
      "path": "/timestamp/?",
      "indexes": [
        {
          "kind": "Range",
          "dataType": "Number",
          "precision": -1
        }
      ]
    }
  ],
  "excludedPaths": [
    {
      "path": "/"
    }
  ]
}

但是当我尝试使用

sort
查询数据库
timestamp
时,它失败并出现以下错误:

Error: error: {
  "_t" : "OKMongoResponse",
  "ok" : 0,
  "code" : 2,
  "errmsg" : "Message: {\"Errors\":[\"The index path corresponding to the specified order-by item is excluded.\"]}\r\nActivityId:    }
azure-cosmosdb azure-cosmosdb-mongoapi
2个回答
1
投票

我有类似的问题并使用 mondo shell 创建索引。 使用 Azure 门户获取 mongo shell 的连接字符串并在 shell 中创建时间戳索引。


0
投票

答案:

在处理动态结构化文档时,您似乎遇到了特定于 Azure Cosmos DB 的 MongoDB API 的问题。一个有效的解决方案是利用通配符索引

通配符索引可帮助您索引所有文档中不一致的字段,非常适合具有不同字段的集合。

要解决您的问题,请创建一个包含所有字段的通配符索引:

db.CollectionName.createIndex( { "$**" : 1 } )

通过这样做,集合中的所有字段都将被索引,从而减轻您面临的 sort() 方法问题。这是一个广泛的解决方案,建议根据应用程序的查询模式定期检查您的索引策略以获得最佳性能。

官方文档了解有关 Azure Cosmos DB 的 MongoDB API 中通配符索引的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.