2010-11-19 5 views
1

От часов я пытаюсь добавить большие объемы данных в моей локально настройке коллекции MongoDB, все устанавливается, за исключением уникального индекса для ключа или ключей :(MongoDB: ensureIndex не работает как на одной клавише и составных ключах

I «ве использовали это:

ensureIndex({appid:1, userid:1}, {unique:true, dropDups:true, background:true}) 

тогда это (сог Я думаю, по какой причине, индекс несколько ключей не работает)

ensureIndex({userid:1}, {unique:true, dropDups:true, background:true}) 

после использования выше строки, я попытался вставить миллионы строк из сценарий php (через как insert, так и batchInsert), и каждый раз повторяются идентификаторы пользователей: '(пожалуйста, пожалуйста, помогите мне по этому поводу :(

+0

Hi! Удалось ли вам это сделать? У меня такая же проблема, или я думаю, по крайней мере. Однако я могу обеспечить индексы, установив «background: true» при запуске администратора консоли Mongo. Вы пробовали это? – Industrial

ответ

0

Возможно, неплохо посмотреть и убедиться, что индекс создан. По умолчанию операции записи (например, создание индексов) запускаются с помощью fire-and-forget и не ждут ошибки/успеха. Это может быть ошибкой в ​​драйвере (php client lib).

Вы можете запустить

db.coll.getIndexes() 

в список индексов для коллекции.

+0

Я точно думал о том же, его coz ov PHP-клиенте, coz в командной строке индексы создают правильно, а также бросает ошибки на дубликаты, но опять-таки таинственный атрибут dropDups ... какова цель этого атрибута, если его не обрабатывать дубликаты и удалять их в соответствии с определением? странные вещи :-) –

+0

btw, я использую RockMongo, поэтому в то же время я вижу создание индексов при вставке записей (в моем случае), но они не работают для дубликатов ... –

1

Я заметил, что securityIndex не перезаписывает существующий индекс. Вместо этого, я считаю, вы должны сначала удалить существующий индекс, а THEN запустить makeIndex.

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

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