web-dev-qa-db-fra.com

Différence entre les champs "id" et "_id" dans MongoDB

Existe-t-il une différence entre utiliser l'ID de champ ou l'ID d'un document MongoDB?

Je pose cette question, car j’utilise habituellement "_id", mais j’ai vu ce type ({id: -1}) dans la documentation: http://www.mongodb.org/display/DOCS/Optimizing+ Object + IDs # OptimizingObjectIDs-Sortbyidtosortbyinsertiontime

[~ # ~] éditer [~ # ~]

Il s'avère que les docs avaient tort.

66
Arthur Neves

Je suppose que c'est juste une faute de frappe dans la documentation. Le _id Le champ est la clé primaire de chaque document. C'est appelé _id et est également accessible via id. Tenter d’utiliser une clé id peut entraîner un illegal ObjectId format Erreur.

Cette section indique simplement que les ObjectID générés automatiquement commencent par un horodatage, ce qui permet de trier automatiquement vos documents. C'est plutôt cool depuis le _id est automatiquement indexé dans chaque collection. Voir http://www.mongodb.org/display/DOCS/Object+IDs pour plus d'informations. Spécifiquement sous "Spécification BSON ObjectID".

Un objet ObjectID est une valeur de 12 octets composée d'un horodatage de 4 octets (secondes depuis Epoch), d'un identifiant d'ordinateur à 3 octets, d'un identificateur de processus à 2 octets et d'un compteur de 3 octets. Notez que les champs timestamp et counter doivent être stockés big endian contrairement au reste de BSON.

55
Leonard Garvey

Le _id champ est le champ par défaut pour les identificateurs d'objet Bson et il est, par défaut, indexé.

_id et id ne sont pas identiques. Vous pouvez également choisir d'ajouter un champ appelé id si vous le souhaitez, mais ce ne sera pas un index sauf si vous ajoutez un index.

C'est juste une faute de frappe dans la documentation.

13
Bryan Migliorisi

id est un alias pour id dans mongoid.id renverrait l'identifiant _id du document. https://github.com/mongodb/mongoid/blob/master/lib/mongoid/fields.rb#L47

si le champ _id n'est pas spécifié, un ObjectedId est généré automatiquement.

5
tessie

Mes deux centimes:

Le champ _id

MongoDB assigne un _id champ à chaque document et assigne un index primaire sur celui-ci. Il existe également des moyens d'appliquer des indices secondaires. Par défaut, MongoDB crée des valeurs pour le _id champ de type ObjectID. Cette valeur est définie dans BSON spec et sa structure est la suivante:

ObjectID (chaîne HEX de 12 octets) = Date (4 octets, une valeur d'horodatage représentant le nombre de secondes depuis l'époque Unix) + adresse MAC (3 octets) + PID (2 octets) + Compteur (3 octets)

2
student