当某些字段可以为null或字符串数​​组时,添加复合索引

时间:2015-06-02 15:43:59

标签: mongodb compound-index

我有一个mongodb系列。

{
    "p1": "V1",
    "p2": ["V2","V3","V4"],
    "p3": ["V5","V6","V7"],
    "p4": "V8"
}

我想在字段p1p2p3上创建索引。我的文档可能没有p2p3。我该如何创建索引?

2 个答案:

答案 0 :(得分:0)

假设p2p3可能丢失或可能等于null,我会像{{}}那样去寻找sparse index

db.myCollection.createIndex( { p1:1, p2:1, p3:1 } , { sparse: true } )

答案 1 :(得分:0)

根据您的问题,很明显您将创建一个复合多键索引,其中两个是数组。但是compound multikey index的限制是,它最多只能有一个索引字段,其值是一个数组。

  

复合多键索引对于复合多键索引,每个索引都是索引的   document最多可以有一个索引字段,其值为数组。   因此,如果不止一个,则无法创建复合多键索引   要编入索引的文档字段是一个数组。或者,如果是化合物   多键索引已经存在,你不能插入一个文件   违反了这个限制。

因此,根据 mongodb手册,您可以将p1p2作为索引字段。

here

了解有关复合多键索引的详情

您的文档可能没有索引字段,在这种情况下,可以使用稀疏索引

对于给定的集合:

db.collection.createIndex( { p1:1, p2:1, p4:1 } , { sparse: true } )

将创建Sparse Index。但是你必须考虑以下限制:

  1. 如果任何文档不包含索引字段,则稀疏索引将不包含该文档的条目。

  2. 使用hint可以解决限制1,但结果可能不完整。

  3. 您可以从here

    了解有关稀疏索引的更多信息