2011-02-17 6 views
0

Я пытаюсь создать составной ключ в качестве поля «_id», которое принимает некоторую геоинформацию, а также другие атрибуты. Это выглядит примерно так:Можете ли вы создать несколько индексов в одном поле в Монго? На что это похоже?

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

После создания документа, Монго присваивает индекс по умолчанию, и игнорирует моя команда

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

Есть ли способ сделать это так, я могу иметь мой индекс _id поля можно использовать как геоиндекс, так и регулярный индекс?

ответ

1

У вас есть два варианта. Оба они требуют изменений в вашей схеме:

  1. Сделать _id уникальный хэш и поставить свои координаты в отдельном поле с 2d индексом:

    {_id: «стандартный ObjectId или ваш хэш», название: "некоторые имя", LOC: [50, 50]}

  2. Если вы действительно хотите _id быть единственным полем (я не рекомендовал бы это):

    {_id: {имя: " некоторое имя ", loc: [50, 50]}}

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

0

Из документации MongoDB:

Пользователи могут использовать свои собственные соглашения для создания идентификаторов ; значение _id может быть любого типа, кроме массивов, если оно уникально. Массивы не допускаются, поскольку они являются Multikeys.

Вам также необходимо будет обеспечить их уникальность. Также это будет связано с некоторыми вещами, которые предполагают, что у вас есть BSON ID

Я бы просто проиндексировал эти поля самостоятельно и сделал составной индекс.

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

 Смежные вопросы

  • Нет связанных вопросов^_^