web-dev-qa-db-fra.com

Comment interroger des documents en utilisant le champ "_id" dans le pilote Java mongodb?

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

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

J'essaie de rechercher ce document

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

Mais je suis en dessous de l'erreur-

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" en tant que chaîne à cette méthode, aucun document ne correspond.

Donc ma question est de savoir comment passer "_id"?

32
user837208

Résolu en utilisant une requête as-

query.putAll((BSONObject)query);
2
user837208

Je ne sais pas si d'autres personnes pourraient rechercher 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 de com.mongodb package (il 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;
}
57
Chris

Pour ceux qui recherchent une méthode plus à jour, notamment avec la 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
}
17
bogolyandras

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);
2
Nifras Nipy