J'utilise Morphia, le mappeur Pojo pour MongoDB, et je trouve difficile une tâche qui, à mon avis, devrait être très simple: obtenir un objet par id. Je suis capable de trouver tous les objets d'une collection, mais je n'arrive pas à comprendre la simple tâche d'interroger en utilisant un identifiant de la liste. Je parle en fait de l'ObjectId. Si j'essaie de le rendre en JSON, je voisInterroger Morphia par Id
Répondre
Cette question semble être tronquée.
Il semble également que la réponse à votre question est sur le Morphia QuickStart page. Semble être aussi simple que suit.
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);
Vous aurez certainement besoin de plus de détails.
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);
Pouvez-vous expliquer pourquoi votre code fonctionne ou ce qu'il fait? Les meilleures réponses expliquent la solution, plutôt que de simplement faire fonctionner le code. – nathangiesbrecht
@nathangiesbrecht Dans la réponse précédente (http://stackoverflow.com/a/4475711/1094584) est incorrecte. MongoDB Id n'est pas le type String. Type d'ID MongoDB est ObjectId (org.bson.types.ObjectId). –
Si vous trouvez par identifiant et l'identifiant est fourni par l'utilisateur (signifie qu'il pourrait être tout type de données), vous ne devriez pas utiliser les solutions données ci-dessus.
Comme cela est expliqué dans le documentation, un ObjectId se compose de 12 octets, donc si vous passez quelque chose à new ObjectId(myValue)
, votre code va jeter un IllegalArgumentException
.
Voici comment je mis en œuvre la méthode pour trouver par 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 l'ID n'est pas un ObjectId valide, il doit * lancer * une exception IllegalArgumentException et non une exception NotFoundException. – metaforge
- 1. MongoDB et Morphia - id Traditionnelle (Long) au lieu de ObjectId
- 2. Stocker JSON dans HBase et interroger par Id
- 3. Morphia avec connexion MongoDB
- 4. MongoDB - Morphia Embedded
- 5. Morphia génériques - pas possible?
- 6. Morphia convertisseur appelant d'autres convertisseurs
- 7. J'étudie Morphia, mais confondu avec le DBRef
- 8. Exception dans morphia-0.93-SNAPSHOT.jar
- 9. morphia traiter les données mauvaises
- 10. Comment interroger AD pour obtenir email Nom de lan id
- 11. Récupérer l'utilisateur par son ID?
- 12. ms accès requête compliquée. interroger les deux dernières entrées par date pour chaque ID. très lent
- 13. Comment interroger la base de données par ID à l'aide de SqlAlchemy?
- 14. MongoDB/Morphia Index composé avec DBRef
- 15. Morphia-MongoDB - « S'il vous plaît remplacer cette méthode pour l'utilisateur marqué entité de champ Id »
- 16. Facebook FQL requête par Facebook ID
- 17. Violation d'index sur une classe référencée, Morphia
- 18. Interroger des ID différents avec des valeurs différentes?
- 19. Morphia/MongoDB: comment parcourir des champs distincts
- 20. ID SQL Problème avec commande par ID
- 21. Django interroger par une relation ensemble (inverse)
- 22. Interroger par près, trier, puis paginer
- 23. Comment interroger YQL tableau rss par pubDate
- 24. SQL à interroger par dépendances de date
- 25. JQuery sélection par ID
- 26. groupe SQL par id
- 27. jQuery ID commence par
- 28. DISTINCTROW par id
- 29. get session par ID
- 30. CoreData - Valeur par ID
ne jamais oublier d'ajouter « @Id ObjectId id » à l'entité. Cela vous rend la vie plus facile. – caarlos0