47 votes

Comment interroger des documents à l'aide du champ "_id" dans le pilote Java mongodb ?

J'essaie de trouver des documents dans MongoDB en recherchant la clé "_id". Mon document ressemble à ceci-

 {
  "_id" : ObjectId("4f693d40e4b04cde19f17205"),
  "hostname" : "hostnameGoesHere",
  "OSType" : "OSTypeGoesHere"
}

J'essaie de rechercher ce document comme-

 ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
BasicDBObject obj = new BasicDBObject();        
obj.append("_id", id);        
BasicDBObject query = new BasicDBObject();        
query.putAll(query);

Mais j'obtiens l'erreur ci-dessous-

 error: reference to putAll is ambiguous, both method putAll(Map) in BasicBSONObject and method putAll(BSONObject) in BasicBSONObject match
        query.putAll(query);

La méthode d'ajout de BasicDBObject prend en charge (String Key, Value) et si je passe "_id" comme String à cette méthode, aucun document ne correspond.

Ma question est donc de savoir comment passer "_id" ?

69voto

Chris Points 192

Je ne sais pas si d'autres recherchent des réponses sur ce sujet, mais voici le moyen le plus simple de rechercher un enregistrement MongoDB basé sur "_id". La documentation MongoDB n'est pas mise à jour et montre toujours ObjectId comme faisant partie du com.mongodb (elle ne donne généralement pas non plus beaucoup d'informations sur la recherche par ObjectId).

 import org.bson.types.ObjectId;

public DBObject findDocumentById(String id) {

    BasicDBObject query = new BasicDBObject();
    query.put("_id", new ObjectId(id));

    DBObject dbObj = collection.findOne(query);
    return dbObj;
}

30voto

bogolyandras Points 81

Pour ceux qui recherchent une méthode plus actuelle, notamment avec 3.4 :

 import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;
import org.bson.types.ObjectId;

import static com.mongodb.client.model.Filters.eq;

//......
MongoCollection<Document> myCollection = database.getCollection("myCollection");
Document document = myCollection.find(eq("_id", new ObjectId("4f693d40e4b04cde19f17205"))).first();
if (document == null) {
    //Document does not exist
} else {
    //We found the document
}

6voto

Nifras Nipy Points 61

Tu peux le faire

  ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
    BasicDBObject obj = new BasicDBObject();        
    obj.append("_id", id);        
    BasicDBObject query = new BasicDBObject();        
    query.putAll((BSONObject)query);

1voto

user837208 Points 790

Résolu en utilisant la requête as-

 query.putAll((BSONObject)query);

-2voto

Vous pouvez essayer cet extrait :

 ObjectId id= new ObjectId("4f693d40e4b04cde19f17205");        
BasicDBObject obj = new BasicDBObject();        
obj.append("_id", id);        
BasicDBObject query = new BasicDBObject();        
query.putAll((BSONObject)obj);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X