Можете ли вы создать несколько индексов для одного поля в Mongo?На что это похоже? - PullRequest
0 голосов
/ 17 февраля 2011

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 17 февраля 2011

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

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

    {_ id: "стандартный ObjectId или ваш хэш", name: "some name", loc: [50, 50]}

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

    {_ id: {name: "some name", loc: [50, 50]}}

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

0 голосов
/ 17 февраля 2011

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

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

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

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

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

...