Java — collection MongoDB.find() par _id
Je suis en train d'essayer d'obtenir un élément d'une collection à l'aide de son unique _id, mais je ne trouve pas comment.
C'est mon code
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase database = mongoClient.getDatabase("DB");
MongoCollection<Document> collection = database.getCollection("COLL");
Si j'ai une requête de ma db avec
BasicDBObject query=new BasicDBObject("info.i0","0");
Document myDoc = collection.find(query).first();
System.out.println(myDoc.toJson());
- Je obtenir en sortie
{ "_id" : { "$oid" : "560ea3f205240f065a3e9d19" }, "name" : "MongoDB", "type" : "database", "count" : 1, "info" : { "i0" : "0", "i1" : "1", "i2" : "2", "i3" : "3", "i4" : "4", "i5" : "5", "i6" : "6", "i7" : "7", "i8" : "8", "i9" : "9" } }
Mais Si j'essaie
BasicDBObject query=new BasicDBObject("_id.$oid","560ea3f205240f065a3e9d19");
Document myDoc = collection.find(query).first();
System.out.println(myDoc.toJson());
J'obtiens une exception de pointeur Null, comme myDoc est null.
Ce que je fais mal?
Vous devez vous connecter pour publier un commentaire.
$oid
est là que pour préserver BFILS représentation.Il n'a de sens que pour MongoDB JSON interne des analyseurs.
Vous n'aurez qu'à utiliser
_id
dans votre requête:BasicDBObject query=new BasicDBObject("_id",new ObjectId("560ea3f205240f065a3e9d19"));
Notez également que le
_id
champ est de typeObjectId
et pasString
.Vous avez de l'envelopper dans un
ObjectId
constructeur.Bonne nouvelle: il n'y a pas de problème dans votre requête, mais que votre document n'a pas l'air correct, Comment vous en mesure d'insérer déposé le nom commence par $ ?
Documents a la suite de restrictions sur les noms de champ:
Le nom du champ _id est réservé pour une utilisation en tant que clé primaire; sa valeur doit être unique dans la collection, qui est immuable, et peuvent être de tout type autre qu'un tableau.
Les noms de champ ne peut pas commencer par le signe dollar ($) caractère.
Les noms de champ ne peut pas contenir le point (.) caractère.
Les noms de champ ne peut pas contenir le caractère null.
http://docs.mongodb.org/manual/core/document/
À l'aide de JSON (scala) :
Json.obj("_id" -> Json.obj("$oid" -> "560ea3f205240f065a3e9d19"))