0

我正在尝试创建一个复合键作为我的“_id”字段,它包含一些地理信息以及其他属性。它看起来像:

{_id: {lat: 50, lon: 50, name: "some name"}}

创建文档后,mongo默认分配索引,忽略我的命令

db.coll.ensureIndex(_id: "2d")

有没有办法做到这一点,所以我可以让我的 _id 字段同时被地理索引和常规索引索引?

4

2 回答 2

1

您在这里有两个选择。它们都需要更改您的架构:

  1. 制作_id一个唯一的散列并将您的坐标放在一个带有 2d 索引的单独字段中:

    {_id: "标准 ObjectId 或你的哈希", name: "some name", loc: [50, 50]}

  2. 如果您真的希望 _id 成为唯一的字段(我不建议这样做):

    {_id: {name: "某个名字", loc: [50, 50]}}

    db.coll.ensureIndex({'_id.loc': '2d'})

于 2011-02-17T19:04:36.013 回答
0

从 MongoDB 文档:

欢迎用户使用自己的约定来创建 id;_id 值可以是数组以外的任何类型,只要它是唯一的。不允许使用数组,因为它们是多键。

您还必须确保这些也是独一无二的。这也会弄乱一些假设你有 BSON ID 的事情

我会自己索引这些字段并创建一个复合索引。

http://www.mongodb.org/display/DOCS/Object+IDs

于 2011-02-17T19:05:50.647 回答