2012-03-14 17 views

risposta

43

Mi aspetto che sia solo un errore di battitura nella documentazione. Il campo _id è la chiave primaria per ogni documento. Si chiama _id ed è anche accessibile tramite id. Il tentativo di utilizzare una chiave id potrebbe causare un errore illegal ObjectId format.

Questa sezione indica solo che gli ID oggetto generati automaticamente iniziano con un timestamp, quindi è possibile ordinare i documenti automaticamente. Questo è piuttosto interessante dato che lo _id viene automaticamente indicizzato in ogni raccolta. Vedere http://www.mongodb.org/display/DOCS/Object+IDs per ulteriori informazioni. Specificamente in "BSON ObjectID Specification".

Un BSON ObjectID è un valore di 12 byte costituito da un timestamp 4 byte (secondi dal periodo), una macchina id 3 byte, un processo 2 byte id, e un contatore di 3 byte. Si noti che i campi data/ora e contatore devono essere memorizzati big endian a differenza del resto di BSON.

+6

è '_id' obbligatorio per ogni documento di una raccolta? in altre parole, posso creare un nuovo documento senza il campo '_id'? –

+2

@KevinMeredith Come specificato [qui] (https://docs.mongodb.com/manual/reference/bson-types/#objectid), sì, un campo '_id' è obbligatorio.«In MongoDB, ogni documento memorizzato in una raccolta richiede un unico campo' _id' che funge da chiave primaria. Se un documento inserito omette il campo '_id', il driver MongoDB genera automaticamente un' ObjectId' per il campo '_id'». – BowPark

10

Il campo _id è il campo predefinito per Bson ObjectId ed è, per impostazione predefinita, indicizzato.

_id e id non sono gli stessi. Puoi anche scegliere di aggiungere un campo chiamato id se lo desideri, ma non sarà indice se non aggiungi un indice.

È solo un errore di battitura nei documenti.

0

I miei due centesimi:

Il campo _id

MongoDB assegna un campo _id ad ogni documento e assegna indice primario su di esso. Ci sono modi in cui possiamo applicare anche indici secondari. Per impostazione predefinita, MongoDB crea valori per il campo _id di tipo ObjectID. Questo valore è definito in BSON spec ed è strutturato in questo modo:

ObjectID (12 byte HEX) = Data (4 byte, un valore timestamp rappresenta il numero di secondi da epoch Unix) indirizzo + MAC (3 byte) + PID (2 byte) + Contatore (3 byte)

Problemi correlati