0

目前,我在我的一个集合中的一个地理空间字段上有一个索引,设置如下:

collection.ensureIndex({ loc : "2d" }, { min : -10000 , max : 10000,
    bits : 32, unique:true}

但是,我想在索引中再包含一个字段,这样我就可以在我的一个用例中利用涵盖的索引查询。具有多个字段(复合索引)的 ensureIndex 看起来像这样:

collection.ensureIndex( { username : 1, password : 1, roles : 1} );

问题是 - 我如何编写带有附加字段的第一个索引规范,以便保留最小/最大参数?换句话说,如何指定 min/max/bits 仅适用于索引字段之一?到目前为止,我最好的猜测是:

collection.ensureIndex({ loc : "2d", field2 : 1 },
    { min : -10000 , max : 10000 , bits : 32, unique:true}

但我不相信这能正常工作!

更新:

这里的文档中有更多信息,但它仍然没有明确显示在这种情况下如何指定最小值/最大值。

4

1 回答 1

0

db.collection.getIndexes() 应该为您提供用于构造索引的参数 - min/max/bits 字段将仅适用于“2d”字段。

除了 getIndexes() 之外,无法查看这些参数,但您可以轻松验证您不允许插入相同的位置/字段对,并且不允许您在边界之外插入 loc(但 field2 可以是任何东西)。位设置更难直接验证,尽管您可以通过将其设置得非常低并看到附近的点然后触发唯一密钥违规来间接验证。

于 2012-08-20T16:14:33.780 回答