【问题标题】:How to Create a nested index in MongoDB?如何在 MongoDB 中创建嵌套索引?
【发布时间】:2012-04-01 13:48:21
【问题描述】:

A.如何索引nested 及其所有值?

B.如何索引valuetwo?

{
    id: 00000,
    attrs: {
        nested:{
            value: value1,
            valuetwo: value2,
        }
    }
}

我看过这里:http://www.mongodb.org/display/DOCS/Indexes,据我所知,文档并不清楚索引未嵌套的内容。

【问题讨论】:

    标签: mongodb indexing


    【解决方案1】:

    您可以像在顶级字段上创建索引一样创建它们:

    db.collection.createIndex({"attrs.nested.value": 1})
    

    您确实需要在每个字段上显式创建索引。

    【讨论】:

    【解决方案2】:

    A. 要索引“嵌套”中的所有属性,您必须单独索引它们:

    db.collection.createIndex({"attrs.nested.value": 1});
    db.collection.createIndex({"attrs.nested.valuetwo": 1});
    

    这可以在一个命令中完成:

    db.collection.createIndexes([{"attrs.nested.value": 1}, {"attrs.nested.valuetwo": 1}]);
    

    B. 仅索引“valuetwo”:

    db.collection.createIndex({"attrs.nested.valuetwo": 1})
    

    在 ensureIndex 上使用 createIndex,因为 ensureIndex 是 Deprecated since version 3.0.0

    【讨论】:

    • 您在 A 中给出的两组索引创建命令是不等效的。第一个在value 和valuetwo 上创建单独的索引。第二个在这两个值上创建一个复合索引。此索引只能用于为 value 指定值的查询。也就是说,仅对 valuetwo 的查询没有用处。
    • 有一个createIndexes() 命令(复数)可以在一个命令中创建多个索引。 (正如@MichaelMior 指出的那样,您的代码创建了一个复合索引,而不是两个单独的索引。)我还没有尝试过,但看起来你会这样做-db.collection.createIndexes([{"attrs.nested.value": 1}, {"attrs.nested.valuetwo": 1}]);
    • @Kip 感谢您指出createIndexes。我编辑了答案以使用它。
    【解决方案3】:

    如果任何索引字段是数组,MongoDB 会自动创建多键索引;您不需要明确指定多键类型。

    这对两个场景都有效

    db.coll.createIndex( { "addr.pin": 1 } )
    

    场景 1 嵌套对象

    {
      userid: "1234",
      addr: {
        pin:"455522"
      }
    },
    {
      userid: "1234",
      addr: {
        pin:"777777"
      }
    }
    

    场景 2 嵌套数组

    {
      userid: "1234",
      addr: [
        { pin:"455522" },
        { pin:"777777" },
      ]
    }
    

    https://docs.mongodb.com/manual/core/index-multikey/

    【讨论】:

      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 2014-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      相关资源
      最近更新 更多