【问题标题】:How do I index two arrays in MongoDB?如何在 MongoDB 中索引两个数组?
【发布时间】:2011-06-29 06:46:34
【问题描述】:
db.hello.ensureIndex({"array1":1, "array2":1})

MongoDB 不允许这样做,因为他们说“它可能会失控”。但是,我知道我的数组长度永远不会超过 3。如何破解 MongoDB 以允许一次索引多个数组?

当使用复合索引时,最多 任何文档中的索引值之一 可以是一个数组。所以如果我们有一个 {a: 1, b: 1} 上的索引,以下 文件都很好:

{a: [1, 2], b: 1} {a: 1, b: [1, 2]} 但是,该文档将无法 被插入,并带有错误消息 “无法索引并行数组”:

{a: [1, 2], b: [1, 2]} 问题 索引并行数组是 的笛卡尔积中的每个值 复合键必须是 索引,这可能会失控 很快。

【问题讨论】:

  • 你确定你需要两个数组的索引吗?如果您已经对其中一个有很高的选择性,那可能就足够了。
  • @Thilo ...第一个数组通常有大约 100 个元素。第二个数组有大约 2-3 个元素。你认为我需要索引第二个数组吗?
  • @TIMEX 不要索引第二个数组,看看它是如何使用解释命令执行的。
  • @Joe 如果我现在没有任何数据怎么办(数据库仅用于测试)。
  • 两个字段中有多少不同的值?如果仅对其中一个索引进行过滤就可以消除 95% 的文档,那就足够了。

标签: mongodb indexing database


【解决方案1】:

您的问题的简短回答是;你没有。您唯一可用的选项是将每个唯一对存储为单个数组元素。所以而不是:

{a:[1,2], b:[8,9]}

你存储

{ab:[[1,8], [1,9], [2,8], [2,9]]}

显然,这有一些缺点,因此这实际上取决于您的特定用例,这是否是一个合适的解决方法。但是,我确实同意 mongo 不应该仅仅为了白痴证明而拒绝多个数组索引。对于小/低基数数组来说,这是一个很好的功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多