Estoy usando Morphia, el mapeador Pojo para MongoDB, y encuentro una tarea difícil que en mi opinión debería ser muy simple: obtener un objeto por identificación. Puedo encontrar todos los objetos en una colección pero no puedo entender la simple tarea de consultar usando una identificación que obtuve de la lista. En realidad, estoy hablando del ObjectId. Si intento renderizarlo en JSON, veoConsultando Morphia por Id
Respuesta
Esta pregunta parece incompleta.
También parece que la respuesta a su pregunta está en el Morphia QuickStart page. Parece ser tan simple como sigue.
Datastore ds = morphia.createDatastore("testDB");
String hotelId = ...; // the ID of the hotel we want to load
// and then map it to our Hotel object
Hotel hotel = ds.get(Hotel.class, hotelId);
Así que definitivamente necesitará más detalles.
Datastore ds = morphia.createDatastore("testDB");
String hotelId = "516d41150364a6a6697136c0"; // the ID of the hotel we want to load
ObjectId objectId = new ObjectId(hotelId);
// and then map it to our Hotel object
Hotel hotel = ds.get(Hotel.class, objectId);
¿Puedes explicar por qué funciona tu código o qué está haciendo? Las mejores respuestas explican la solución, en lugar de solo el código de funcionamiento. – nathangiesbrecht
@nathangiesbrecht En la [respuesta] anterior (http://stackoverflow.com/a/4475711/1094584) es incorrecto. MongoDB Id no es el tipo String. El tipo de ID de MongoDB es ObjectId (org.bson.types.ObjectId). –
Si usted está encontrando por id y la identificación es proporcionada por el usuario (significa que podría ser cualquier tipo de datos), no debería utilizar las soluciones dadas anteriormente.
Como se explica en la documentation, un OBJECTID consta de 12 bytes, por lo que si pasa algo más para new ObjectId(myValue)
, el código generará un IllegalArgumentException
.
Aquí es cómo he implementado el método para encontrar por id:
public Model findById(String id) throws NotFoundException {
if (!ObjectId.isValid(id)) {
throw new NotFoundException();
}
ObjectId oid = new ObjectId(id);
Model m = datastore().find(Model.class).field("_id").equal(oid).get();
if (m == null) {
throw new NotFoundException();
}
return m;
}
Si el ID no es un ObjectId válido, * debe * arrojar una IllegalArgumentException, no una NotFoundException. – metaforge
- 1. Mongoid 2.4 Consultando documento incrustado por ID A falta
- 2. Scala, Morphia y Enumeration
- 3. MongoDB Morphia - Unique
- 4. Consultando en redis
- 5. Consultando un LDAP
- 6. Playframework + Morphia + MongoDb + ElasticSearch = Disater?
- 7. Morphia mongoDB consulta de comodín
- 8. Consultando servicios web con SQL
- 9. Consultando html usando Yahoo YQL
- 10. WCF consultando una matriz de objetos
- 11. Compleja AND-OR consulta en Morphia
- 12. Consultando extensiones en certificados X509 usando OpenSSL
- 13. Windows Azure Tables, consultando con Contiene
- 14. Obtiene objeto por id()?
- 15. ASP.NET MultiView por ID?
- 16. NHibernate evict por id
- 17. Consultando columnas CompositeType en Cassandra usando Hector
- 18. Consultando todos los resultados en Lucene IndexSearcher
- 19. Consultando un servidor DHCP en C#
- 20. morphia y cómo actualizar el campo del documento existente
- 21. javascript obtener hijo por id
- 22. Hibernate: obtener entidad por id
- 23. Rieles Obtenga Múltiple por ID
- 24. Android - Buscar artículo Por ID
- 25. Ocultar elemento HTML por id
- 26. ¿Por qué existen las ID?
- 27. Richfaces - Obtener elemento por Id
- 28. ¿Por qué $ ('# id') devuelve verdadero si el id no existe?
- 29. ¿Por qué querySelector ('# id') asigna a document.getElementById ('id')?
- 30. ID, id o Id?
nunca se olvide de añadir "Identificación del @Id OBJECTID" a la entidad. Te hace la vida más fácil. – caarlos0