【问题标题】:How do we override the default indexing limit in mongoDB?我们如何覆盖 mongoDB 中的默认索引限制?
【发布时间】:2019-06-03 15:40:23
【问题描述】:

我有一个超过 125 个字符的 AWS Cognito JWT,我需要在 MongoDB 中为其创建索引。但问题是MongoDB索引接受最大限制的字符,125。我们如何设置最大限制或者有什么办法增加默认字符限制。

我尝试索引 JWT(大约 150 个字符),但出现以下错误。

  MongoError: WiredTigerIndex::insert: key too large to index, failing  1025 { : "abc@xyz.com", "asdfghjkertyjk......"}

这就是我创建架构索引的方式。

schemaName.index({ email: 1, token: 1 });

【问题讨论】:

  • 你没有提到你使用的是什么版本的MongoDB服务器,但是当前的Index Key Limit是1024字节。该错误消息表明您正在尝试索引 1025 字节的值,因此您的 JWT 值似乎比预期的大得多。索引大值通常对性能没有帮助,所以我肯定会考虑另一种方法。

标签: mongodb mongoose indexing


【解决方案1】:

我会采用不同的方法,因为索引大型文本/字符串字段并不总是最佳选择。

使用 SHA1 或 MD5 生成 JWT 字符串的唯一校验和(这将为您提供恒定的字符串长度)并保存该字段。按该字段索引和搜索

另一种选择是将 JWT 令牌解码为 JSON 并将其存储为嵌入式文档 - 然后您可以索引该文档(但恕我直言,这是一个有风险的选择)

【讨论】:

  • 谢谢你,沙哈尔。根据我的要求,我需要使用 Cognito JWT 令牌。
  • 您仍然可以使用它 - 添加另一个包含 SHA1/MD5 结果的字段 - 当您进行查找时 - 计算 SHA1/MD5 并按该值查找。您可能会获得更快的索引查找...另一种选择是将 JWT 令牌解码为 JSON 并将其存储为嵌入式文档 - 然后您可以索引该文档(但恕我直言,这是一个有风险的选择)
猜你喜欢
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 2017-03-13
  • 2019-08-15
  • 1970-01-01
  • 2019-05-09
  • 1970-01-01
相关资源
最近更新 更多