我正在尝试创建一个复合键作为我的“_id”字段,它接收一些地理信息以及其他属性。它看起来像:
{_id: {lat: 50, lon: 50, name: "some name"}}
创建文档后,mongo默认指定一个索引,并忽略我的命令
db.coll.ensureIndex(_id: "2d")
有没有办法做到这一点,所以我可以通过地理索引和常规索引使我的_id字段索引?
答案 0 :(得分:1)
这里有两种选择。它们都需要更改架构:
使_id
成为唯一的哈希,并将您的坐标放在具有2d索引的单独字段中:
{_ id:“标准ObjectId或您的哈希”,名称:“some name”,loc:[50,50]}
如果你真的想让_id成为唯一的领域(我不推荐这个):
{_ id:{name:“some name”,loc:[50,50]}}
db.coll.ensureIndex({'_ id.loc':'2d'})
答案 1 :(得分:0)
来自MongoDB文档:
欢迎用户使用自己的约定来创建ID;除了数组之外,_id值可以是任何类型,只要它是唯一的。不允许使用数组,因为它们是Multikeys。
您还必须确保这些也是独一无二的。此外,这将使一些假定您拥有BSON ID
的东西搞得一团糟我只是自己索引这些字段并制作复合索引。