0

我有一个 mongodb 集合。

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

我想在字段p1, p2,上创建一个索引p3。我的文档可能没有p2p3。我应该如何创建我的索引?

4

2 回答 2

0

假设p2andp3可能丢失或可能等于null,我会选择这样的稀疏索引

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

于 2015-06-02T18:45:12.250 回答
0

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

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

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

此处了解有关复合多键索引的更多信息

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

对于给定的集合:

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

将创建一个Sparse Index. 但是您必须考虑以下限制:

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

  2. 使用hint可以解决限制 1 但您可能会得到不完整的结果。

您可以从此处了解有关稀疏索引的更多信息

于 2015-06-02T19:14:03.690 回答