Привет, мне нужно создать первичный ключ.
Если я вставлю { "name":"test1", "age":10}
а потом { "name":"test1", "age":20}
.
если мне нужно, чтобы это имя было первичным ключом, мне нужно создать индекс:
db.collection.createIndex( { "name": "test1" }, { unique: true } )
Но я думаю, что это не решит проблему, если я вставлю 1000 имен, после каждой вставки мне нужно создать индекс? Есть ли лучшее решение?
Спасибо
да я пример привел....
если я вставлю 1000 имен, после каждой вставки мне нужно создать индекс?
Нет. Вы бежите createIndex
только один раз.
Редактировать: Кроме того, вы неправильно создаете индекс. Извините, я только что заметил это после вашего комментария в этом ответе.
Правильный синтаксис для создания уникального индекса:
db.collection.createIndex( { "field_name": 1 }, { unique: true } )
Значение после "field_name":
— это не значение самого поля, а направление индекса. Может быть:
* 1: по возрастанию
*-1: по убыванию
Итак, в вашем случае вы сделаете следующее, чтобы создать уникальный индекс с именами в порядке возрастания:
db.collection.createIndex( { "name": 1 }, { unique: true } )
Тем не менее, вы должны знать следующее:
name
. Таким образом, лучше всего создавать индекс перед добавлением документов в коллекцию.name
, для первого автоматически будет создано поле "name": null
. Следующий документ без этого поля не будет вставлен из-за уже существующего документа с "name": null
.Подробнее здесь
Я не понимаю, как я могу создать уникальный индекс, если в этот индекс необходимо передать имя или номер? и каждая строка имеет другое значение.
если я создаю и индексирую, это только с одним значением, но в этом случае мне нужен индекс не для значения, а для столбца или ключа. Мне нужно, чтобы ключ был уникальным, а не чтобы ключ = 1 был уникальным или ключ = 2 был уникальным
Прости, @Виктор. Я только заметил, что вы неправильно создавали индекс после ваших комментариев выше. Я обновил свой ответ. Надеюсь, поможет :)