2012-03-21 19 views
28

Sto cercando di trovare documenti in MongoDB cercando sul tasto "_id". Il documento si presenta come questo-Come interrogare i documenti usando il campo "_id" nel driver Java mongodb?

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

sto provando a cercare questo documento AS

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

ma ho seguito degli errori

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

Il metodo append dei supporti BasicDBObject (String Key, Value) e se si passa "_id" come String a questo metodo, nessun documento è abbinato.

Quindi la mia domanda è come passare "_id"?

+0

L'altra risposta mi ha aiutato di più. Forse accetti questo ... – Ohmen

risposta

3

risolto utilizzando query di AS

query.putAll((BSONObject)query); 
48

Non sono sicuro se altri potrebbero essere alla ricerca di risposte su questo argomento, ma qui è il modo più semplice per cercare un record MongoDB sulla base di "_id". La documentazione di MongoDB non viene aggiornata e mostra ancora ObjectId come parte del pacchetto com.mongodb (in genere non fornisce molte informazioni sulla ricerca di 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; 
} 
0

È possibile farlo

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

Per coloro che sono alla ricerca di un altro metodo fino a oggi, in particolare con 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 
} 
Problemi correlati