我正在尝试创建一个复合键作为我的“_id”字段,它包含一些地理信息以及其他属性。它看起来像:
{_id: {lat: 50, lon: 50, name: "some name"}}
创建文档后,mongo默认分配索引,忽略我的命令
db.coll.ensureIndex(_id: "2d")
有没有办法做到这一点,所以我可以让我的 _id 字段同时被地理索引和常规索引索引?
我正在尝试创建一个复合键作为我的“_id”字段,它包含一些地理信息以及其他属性。它看起来像:
{_id: {lat: 50, lon: 50, name: "some name"}}
创建文档后,mongo默认分配索引,忽略我的命令
db.coll.ensureIndex(_id: "2d")
有没有办法做到这一点,所以我可以让我的 _id 字段同时被地理索引和常规索引索引?
您在这里有两个选择。它们都需要更改您的架构:
制作_id
一个唯一的散列并将您的坐标放在一个带有 2d 索引的单独字段中:
{_id: "标准 ObjectId 或你的哈希", name: "some name", loc: [50, 50]}
如果您真的希望 _id 成为唯一的字段(我不建议这样做):
{_id: {name: "某个名字", loc: [50, 50]}}
db.coll.ensureIndex({'_id.loc': '2d'})
从 MongoDB 文档:
欢迎用户使用自己的约定来创建 id;_id 值可以是数组以外的任何类型,只要它是唯一的。不允许使用数组,因为它们是多键。
您还必须确保这些也是独一无二的。这也会弄乱一些假设你有 BSON ID 的事情
我会自己索引这些字段并创建一个复合索引。