web-dev-qa-db-fra.com

Comment générer un identifiant d'objet unique dans mongodb

Lorsque j'utilise Mongodb avec Java, je veux générer un identifiant d'objet sur les clients. Avant d'insérer un enregistrement, cependant, je dois d'abord interroger mongodb pour m'assurer que l'identifiant généré par la méthode ObjectId () est unique. Existe-t-il un moyen de générer un identifiant d'objet unique sans accéder à mongodb deux fois?

26
NOrder

Les ID d'objet ne sont pas comme les ID séquentiels que vous utilisez dans un RDMS. S'ils sont correctement générés selon la spécification de l'ID d'objet , vous n'aurez pas à vous soucier de leur caractère unique.

Tout ce que vous avez à faire est de toujours créer un nouvel ID d'objet plutôt que de les réutiliser.

23
Zachary Anker

Vous pouvez générer ObjectId sur le client sans consulter la base de données. Un tel ID sera unique (vous devrez faire un gros effort pour obtenir deux identifiants d'objet identiques).

ObjectId id = new ObjectId();

// or this
ObjectId id = ObjectId.get();
50
Sergio Tulentsev

Depuis MongoDB Java Driver 3.3.0, il existe les moyens suivants pour créer des ObjectIds.

tilisation du constructeur sans paramètres: Fournit un ObjectId unique

1. ObjectId id1 = new ObjectId(); //Generates unique id 

    1.1. ObjectId id2 = ObjectId.get(); //Calls new ObjectId();

tilisation des constructeurs paramétrés: Les paramètres influencent l'unicité de l'ObjectId

2. public ObjectId(byte[] bytes) // Receives a byte array of size 12.

3. public ObjectId(String hexString) //Receives a String that is a hexadecimal representation of 12 bytes.

4. public ObjectId(Date date) // Receives a Date object

5. public ObjectId(Date date, int counter) //Receives date and a counter

6. public ObjectId(Date date,
            int machineIdentifier,
            short processIdentifier,
            int counter) //Receives Date, MachineId, PID and counter.

7. public ObjectId(int timestamp,
            int machineIdentifier,
            short processIdentifier,
            int counter) //Receives Epoch time in sec, MachineId, PID and counter.

Comprendre ObjectId:

ObjectId se compose de 12 octets, répartis comme suit:

               ObjectID layout

0   1   2   3   4   5   6   7   8   9   10  11

|time          |machine    |pid    |inc      |
6
4J41