Як встановити первинний ключ у MongoDB?


79

Я хочу встановити одне зі своїх полів як первинний ключ . Я використовую MongoDB як свій NoSQL.

Відповіді:


87

_idполе зарезервовано для первинного ключа в mongodb, і це має бути унікальним значенням. Якщо ви нічого не встановите, _idвін автоматично заповнить його "MongoDB Id Object". Але ви можете додати будь-яку унікальну інформацію в це поле.

Додаткова інформація: http://www.mongodb.org/display/DOCS/BSON

Сподіваюся, це допоможе.


78
Це насправді не відповідає how to set one of my fields as primary key, наприклад: я хочу user_email як ключ у колекціях користувачів, але як встановити це поле як ключове та унікальне
Medet Tleukabiluly

4
Як це відповідає на питання ??
Локеш Санапаллі,

Поле _id є індексом за замовчуванням і повинно бути унікальним. Тому помістіть у це поле дані, які є вашим унікальним обмеженням. ( docs.mongodb.com/master/indexes/#default-id-index )
Стівен Скотт

24

Інший спосіб - створити Indexesдля своєї колекції та переконатися, що вони унікальні.

Більше ви можете знайти за наступним посиланням

Я насправді вважаю це досить простим і простим у реалізації.


3
"Унікальне обмеження на індекси гарантує, що лише один документ може мати значення для поля в колекції. Для шардованих колекцій ці унікальні індекси не можуть забезпечити унікальність, оскільки операції вставки та індексування локальні для кожного осколка
JohnC

17

У mongodb поле _id зарезервовано для первинного ключа. Mongodb використовує внутрішнє значення ObjectId, якщо ви не визначаєте його у своєму об'єкті, а також створюєте індекс для забезпечення продуктивності.

Але ви можете вказати своє власне унікальне значення для _id, і Mongodb використовуватиме його замість того, щоб робити його для вас. І навіть якщо ви хочете використовувати декілька полів як первинний ключ, ви можете використовувати об'єкт:

{ _id : { a : 1, b: 1} }

Тільки будьте обережні, створюючи ці ідентифікатори, щоб порядок ключів (а і b у прикладі) мав значення, якщо ви поміняєте їх місцями, це вважається іншим об’єктом.


13

Якщо ви думаєте як СУБД, ви не можете створити первинний ключ. Первинним ключем за замовчуванням є _id. Але ви можете створити унікальний індекс . Приклад наведено нижче.

db.members.createIndex( { "user_id": 1 }, { unique: true } )

db.members.insert({'user_id':1,'name':'nanhe'})

db.members.insert({'name':'kumar'})

db.members.find();

Вихід наведено нижче.

{"_id": ObjectId ("577f9cecd71d71fa1fb6f43a"), "user_id": 1, "name": "nanhe"}

{"_id": ObjectId ("577f9d02d71d71fa1fb6f43b"), "name": "kumar"}

При спробі вставити той самий user_id mongodb видає помилку запису.

db.members.insert({'user_id':1,'name':'aarush'})

WriteResult ({"nInserted": 0, "writeError": {"code": 11000, "errmsg": "Колекція помилок повторюваного ключа E11000: індекс студента.членів: user_id_1 dup ключ: {: 1.0}"}})



6

Одним із способів досягнення такої поведінки є встановлення значення значення _id(яке зарезервовано для первинного ключа в MongoDB) на основі користувацьких полів, які ви хочете розглядати як первинний ключ.
тобто якщо я хочу employee_idяк первинний ключ, то під час створення документа в MongoDB; присвоїти _idзначення таке ж, як і employee_id.


3

Це синтаксис створення первинного ключа

db. <collection> .createIndex (<специфікація типу ключа та індексу>, {унікальний: true})

Візьмемо, що в нашій базі даних є колекція з іменем student, а в документі є ключ з іменем student_id, який нам потрібно зробити первинним ключем. Тоді команда повинна бути, як показано нижче.

db.student.createIndex({student_id:1},{unique:true})

Ви можете перевірити, чи встановлено цей ідентифікатор студента як первинний ключ, спробувавши додати повторюване значення до колекції студентів .

віддайте перевагу цьому документу для отримання додаткової інформації https://docs.mongodb.com/manual/core/index-unique/#create-a-unique-index


3

http://docs.mongodb.org/manual/tutorial/create-an-auto-incrementing-field/

Ви також можете перевірити це посилання та автоматично збільшити _idполе.


20
Зауважте, що відповіді лише на посилання не рекомендуються, відповіді SO повинні бути кінцевою точкою пошуку рішення (порівняно з черговою зупинкою посилань, які з часом старіють). Будь ласка, додайте сюди окремий конспект, зберігаючи посилання як посилання.
kleopatra

4
Зараз посилання розірвано, тому така відповідь марна
PeterM

2
Проголосовано проти, оскільки сторінка тепер переспрямовує на: docs.mongodb.com/manual/crud, де не згадується ні "авто", ні "збільшення".
die maus

2

Якщо ви використовуєте Mongo на Meteor, ви можете використовувати _ensureIndex:

CollectionName._ensureIndex({field:1 }, {unique: true});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.