remove indexes index for create compound java mongodb morphia

java - for - show indexes mongodb



Clave compuesta de MongoDB (3)

Me di cuenta de que la pregunta está marcada como "java", por lo que querría hacer algo como:

final BasicDBObject id = new BasicDBObject("a", aVal) .append("b", bVal) .append("c", cVal); results = coll.find(new BasicDBObjet("_id", id));

También uso Morphia, pero he encontrado (que mientras funciona) genera muchos errores mientras trata de ordenar la clave compuesta. Uso lo anterior cuando consulto para evitar estos errores.

Mi código original (que también funciona):

final ProbId key = new ProbId(srcText, srcLang, destLang); final QueryImpl<Probabilities> query = ds.createQuery(Probabilities.class) .field("id").equal(key); Probabilities probs = (Probabilities) query.get();

Mi clase ProbId está anotada como @Entity(noClassnameStored = true) y dentro de la clase Probabilities, el campo id es @Id ProbId id;

Estoy empezando con MongoDb y me he dado cuenta de que obtengo muchos registros duplicados para las entradas que quería ser únicas. Me gustaría saber cómo usar una clave compuesta para mis datos y estoy buscando información sobre cómo crearlos. Por último, estoy usando Java para acceder a mongo y morphia como mi capa ORM, por lo que incluir aquellas en tus respuestas sería increíble.

Morphia: http://code.google.com/p/morphia/


Puede crear Índices únicos en los campos del documento en los que le gustaría probar la singularidad. También pueden ser compuestos (denominados índices de clave compuesta en MongoDB land), como puede ver en la documentación. Morphia tiene una anotación @Indexed para admitir la indexación en el nivel de campo. Además con morphia, puede definir claves compuestas en el nivel de clase con la anotación @Indexed .


También puede usar objetos para el campo _id. El campo _id es siempre único. De esa forma, obtendrás una clave primaria compuesta:

{ _id : { a : 1, b: 1} }

Solo tenga cuidado al crear estas identificaciones que importa el orden de las teclas (ayb en el ejemplo), si las cambia, se considera un objeto diferente.

La otra posibilidad es dejar _id solo y crear un índice compuesto único .

db.things.ensureIndex({firstname: 1, lastname: 1}, {unique: true}); //Deprecated since version 3.0.0, is now an alias for db.things.createIndex()

https://docs.mongodb.org/v3.0/reference/method/db.collection.ensureIndex/