Можете ли вы создать несколько индексов для одного поля в Mongo? На что это похоже?
Я пытаюсь создать составной ключ как поле "_id", которое принимает некоторую геоинформацию и другие атрибуты. Это выглядит примерно так:
{_id: {lat: 50, lon: 50, name: "some name"}}
После создания документа Монго назначает индекс по умолчанию и игнорирует мою команду
db.coll.ensureIndex(_id: "2d")
Есть ли способ сделать это, чтобы я мог индексировать свое поле _id как по гео-индексу, так и по обычному индексу?
2 ответа
У вас есть два варианта здесь. Оба они требуют изменения в вашей схеме:
Делать
_id
уникальный хеш и поместите ваши координаты в отдельное поле с двумерным индексом:{_id: "стандартный ObjectId или ваш хэш", name: "some name", loc: [50, 50]}
Если вы действительно хотите, чтобы _id было единственным полем (я бы не рекомендовал это):
{_id: {name: "some name", loc: [50, 50]}}
db.coll.ensureIndex ({'_ id.loc': '2d'})
Из документации MongoDB:
Пользователи могут использовать свои собственные соглашения для создания идентификаторов; Значение _id может быть любого типа, кроме массивов, если оно уникально. Массивы не допускаются, потому что они являются мультиключами.
Вы также должны убедиться, что они тоже уникальны. Также это будет мешать некоторым вещам, которые предполагают, что у вас есть BSON ID
Я бы просто проиндексировал эти поля самостоятельно и сделал бы составной индекс.