2012-01-04 97 views
17

Cuando uso Mongodb con Java, quiero generar ID de objeto en clientes. Sin embargo, antes de insertar un registro, primero tengo que consultar mongodb para asegurarme de que el ID generado por el método ObjectId() sea único. ¿Hay alguna manera de que pueda generar una identificación de objeto única sin acceder a mongodb dos veces?Cómo generar ID de objeto único en mongodb

Respuesta

18

Los identificadores de objetos no son como los identificadores secuenciales que utiliza en un RDMS. Si se generan correctamente según el Object ID specification, no tendrá que preocuparse de que sean únicos.

Todo lo que tiene que hacer es asegurarse de crear siempre una nueva ID de objeto en lugar de reutilizarlos.

+2

Por lo tanto, si genero el ID por: Id. De Id. De objeto = Id. De Objeto nuevo(); entonces la identificación debe ser única ya? Gracias – NOrder

+1

@vienna Correcto. Solo tiene que asegurarse de llamarlo cada vez que guarde un registro en la base de datos. –

42

Puede generar ObjectId en el cliente sin consultar la base de datos. Dicha identificación será única (tendrá que intentar con todas sus fuerzas obtener dos ID de objeto idénticos).

ObjectId id = new ObjectId(); 

// or this 
ObjectId id = ObjectId.get(); 
+0

Hay una diferencia entre esas dos formas? vivas – DanielPanic

+0

Sin diferencia. ObjectId # get solo llama al constructor. –

+0

¿Cómo funciona esto? es este javascript? – Jennifer

4

A partir de MongoDB Java Driver 3.3.0, existen las siguientes formas de crear ObjectIds.

usando el constructor sin parámetros:Proporciona OBJECTID única

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

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

Utilizando los constructores parametrizados:parámetros influyen en la singularidad de la 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. 

entendimiento objetivación d:

OBJECTID consta de 12 bytes, según la siguiente distribución:

   ObjectID layout 

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

|time   |machine |pid |inc  |