目前,我的一个集合中的地理空间字段有一个索引,如下所示:
collection.ensureIndex({ loc : "2d" }, { min : -10000 , max : 10000,
bits : 32, unique:true}
但是,我想在索引中再包含一个字段,因此我可以在其中一个用例中利用covered index queries。具有多个字段(复合索引)的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}
但我不相信这是应该的!
更新:
文档here中有更多信息,但在这种情况下仍未明确说明如何指定最小值/最大值。
答案 0 :(得分:0)
db.collection.getIndexes()应该为您提供用于构造索引的参数 - 最小/最大/位字段将仅适用于“2d”字段。
除了getIndexes()之外,没有办法看到这些参数,但是您可以轻松验证不允许插入相同的位置/字段对,并且不允许在边界外插入位置(但是field2可以是任何东西)。位设置更难以直接验证,但您可以通过将其设置得非常低来间接验证并查看附近的点然后触发唯一的密钥违规。