Soy un novato en mongodb. Puedo saber cómo evitar las entradas duplicadas. En tablas relacionales, usamos la clave principal para evitarlo. ¿Puedo saber cómo especificarlo en Mongodb usando java?Mongodb evitar las entradas duplicadas
Respuesta
Utilice un índice con la opción {unique:true}
.
// everyone's username must be unique:
db.users.createIndex({email:1},{unique:true});
También puede hacerlo en múltiples campos. Consulte this section en los documentos para obtener más detalles y ejemplos.
índices MongoDB pueden imponer opcionalmente un única restricción de clave, lo que garantiza que ningún documento se insertan valores cuya indexados para las teclas de coincidir con los de un documento existente.
Si usted desea para null
valores a ser ignorados por la clave única, entonces usted tiene que también hacen que el índice disperso (ver here), por, además de darle la opción sparse
:
// everyone's username must be unique,
//but there can be multiple users with no email field or a null email:
db.users.createIndex({email:1},{unique:true, sparse:true});
Si desea crear el índice utilizando el controlador MongoDB Java. Proveedores:
Document keys = new Document("email", 1);
collection.createIndex(keys, new IndexOptions().unique(true));
No soy un programador de Java, sin embargo, probablemente pueda convertir esto de nuevo.
MongoDB por defecto tiene una clave principal conocido como el _id
puede utilizar upsert()
o save()
en esta clave para evitar que el documento está escrito dos veces de esta manera:
var doc = {'name': 'sam'};
db.users.insert(doc); // doc will get an _id assigned to it
db.users.insert(doc); // Will fail since it already exists
Esto detendrá inmediatamente duplicados. En cuanto a los insertos seguros de múltiples hilos bajo ciertas condiciones: bueno, necesitaríamos saber más acerca de su condición en ese caso.
Debo agregar, sin embargo, que el índice _id
es independiente de forma predeterminada.
solución Teón no funcionó para mí, pero éste lo hizo:
BasicDBObject query = new BasicDBObject(<fieldname>, 1);
collection.ensureIndex(query, <index_name>, true);
Esto se puede hacer utilizando el campo "_id" aunque este uso no se recomienda. supongamos que desea que los nombres sean únicos, luego puede poner los nombres en la columna "_id" y, como sabrá, la columna "_id" es única para cada entrada.
BasicDBObject bdbo = new BasicDBObject("_id","amit");
Ahora, hay otra entrada puede tener nombre como "Amit" en los collection.This puede ser una de la manera que usted está pidiendo.
A partir del controlador Java v3.0 de Mongo, el código para crear el índice se parece a:
public void createUniqueIndex() {
Document index = new Document("fieldName", 1);
MongoCollection<Document> collection = client.getDatabase("dbName").getCollection("CollectionName");
collection.createIndex(index, new IndexOptions().unique(true));
}
// And test to verify it works as expected
@Test
public void testIndex() {
MongoCollection<Document> collection = client.getDatabase("dbName").getCollection("CollectionName");
Document newDoc = new Document("fieldName", "duplicateValue");
collection.insertOne(newDoc);
// this will throw a MongoWriteException
try {
collection.insertOne(newDoc);
fail("Should have thrown a mongo write exception due to duplicate key");
} catch (MongoWriteException e) {
assertTrue(e.getMessage().contains("duplicate key"));
}
}
- 1. Entradas duplicadas en ListView
- 2. Cómo evitar las etiquetas de las entradas
- 3. Eliminar las entradas duplicadas de una caja de selección
- 4. Filtro para mostrar solo las entradas duplicadas en Excel 2010
- 5. ¿Cómo eliminar las entradas duplicadas de una matriz?
- 6. ¿Cómo prevenir las entradas duplicadas mientras se actualiza?
- 7. Seleccionar una fila sin entradas duplicadas
- 8. Eliminar entradas duplicadas usando un script Bash
- 9. Búsqueda de entradas duplicadas en la Colección
- 10. Python: eliminar entradas duplicadas de CSV
- 11. Cómo evitar las declaraciones duplicadas de Q_DECLARE_METATYPE <aCommonType>
- 12. insertar ignorar en entradas duplicadas en Doctrine2/Symfony2
- 13. Error de manejo para entradas duplicadas - PHP MySQL
- 14. Restricción de hibernación ConstraintViolationException. ¿Hay alguna manera fácil de ignorar las entradas duplicadas?
- 15. ¿Por qué la función Union en LINQ no elimina las entradas duplicadas?
- 16. ¿Se duplicarán las llamadas addEventListener para crear entradas duplicadas de escucha?
- 17. Eliminar filas duplicadas (no eliminar todas las duplicadas)
- 18. devolver todas las filas duplicadas
- 19. Actividad de inicio a través de notificación: evitar actividades duplicadas
- 20. buscando entradas mongodb por joda Rango DateTime scala/casbah
- 21. ¿Cómo puedo evitar escribir pruebas de unidades duplicadas para las clases que implementan la misma interfaz?
- 22. ¿cómo funciona codeigniter para desinfectar las entradas?
- 23. Usando un ObjectId autodefinido y evitando las entradas dobles en Mongoose
- 24. ¿Detener las sumisiones duplicadas de Ajax?
- 25. ¿Cómo suprimir por completo las filas duplicadas
- 26. ¿Cómo evitar que Wix elimine las entradas de registro en la desinstalación?
- 27. ¿Cómo se omiten las entradas duplicadas en Google Chrome Console de Javascript (en Herramientas de desarrollador web)?
- 28. eliminación de entradas duplicadas de matriz multi-d en el pitón
- 29. Soluciones duplicadas
- 30. ¿Cómo puedo encontrar entradas duplicadas en una tabla de base de datos?
Nota: 'null' y none existe también cuenta como valores únicos así que si tienes una tabla de usuarios con algunos eliminados y por ley eliminas sus datos pero mantienes su fila para su eliminación futura tendrás problemas con índices únicos Supongo que es una necesidad realmente. – Sammaye
@Sammaye: puede usar [índices dispersos] (http://www.mongodb.org/display/DOCS/Indexes#Indexes-sparse%3Atrue) para resolver el problema con los campos null/missing. – Stennie
+1 Se menciona en los documentos aquí, último párrafo para índices únicos: http://docs.mongodb.org/manual/core/indexes/#unique-index – theon