2015-08-12 21 views
7

Nel driver Java Mongo DB versione 3 l'API è cambiato rispetto alla versione 2. Quindi un codice come questo non può essere compilato più:Come convertire un BasicDBObject in un documento Mongo con il driver Java Mongo DB versione 3?

BasicDBObject personObj = new BasicDBObject(); 
collection.insert(personObj) 

Una collezione di inserimento funziona solo con un documento di Mongo.

Trattare con il vecchio codice ho bisogno di porre la domanda:

Qual è il modo migliore per convertire un BasicDBObject a un documento?

+1

Si consiglia di vedere [questo] (http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/crud/#codecregistry) –

risposta

0

Il documento è molto simile a BasicDBObject. Non sono abbastanza sicuro di ciò a cui ti stai riferendo come metodo per convertire BasicDBObjects in Documenti, ma l'oggetto Document fornisce alcuni metodi molto utili.

Document.parse (stringa) restituirà un documento se lo si alimenta in una stringa JSON.

Document.append ("chiave", valore) si aggiungerà ai campi di un documento.

Per quanto riguarda il codice nel tuo post, questo dovrebbe compilare con la versione 3:

Document personObj = new Document(); 
collection.insertOne(personObj) 

Vedi

Java Driver 3.0 Guide

e

MongoDB Java Driver 3.0 Documentation

+0

Cosa ricevo BasicDBObject da un vecchio metodo e quindi voglio inserirlo? –

+1

Si potrebbe fare documento doc = Document.parse (YourBasicDBObject.toString()); – dbenson

5

Credo che il più facile cosa da fare è solo cambiare il tuo codice per utilizzare un documento invece di BasicDBObject.

Così cambia

BasicDBObject doc = new BasicDBObject("name", "john") 
    .append("age", 35) 
    .append("kids", kids) 
    .append("info", new BasicDBObject("email", "[email protected]") 
    .append("phone", "876-134-667")); 

Per

import org.bson.Document; 
... 
Document doc = new Document("name", "john") 
    .append("age", 35) 
    .append("kids", kids) 
    .append("info", new BasicDBObject("email", "[email protected]") 
    .append("phone", "876-134-667")); 

e quindi inserire nella collezione

coll.insertOne(doc); 

Avrai bisogno di cambiare altri pezzi di codice per lavorare con MongoDB 3+

MongoDatabase vs DB MongoCollection vs DBCollection

0
@SuppressWarnings("unchecked") 
public static Document getDocument(BasicDBObject doc) 
{ 
    if(doc == null) return null; 
    Map<String, Object> originalMap = doc.toMap(); 
    Map<String, Object> resultMap = new HashMap<>(doc.size()); 
    for(Entry<String, Object> entry : originalMap.entrySet()) 
    { 
     String key = entry.getKey(); 
     Object value = entry.getValue(); 
     if(value == null) 
     { 
      continue; 
     } 
     if(value instanceof BasicDBObject) 
     { 
      value = getDocument((BasicDBObject)value); 
     } 
     if(value instanceof List<?>) 
     { 
      List<?> list = (List<?>) value; 
      if(list.size() > 0) 
      { 
       // check instance of first element 
       Object firstElement = list.get(0); 
       if(firstElement instanceof BasicDBObject) 
       { 
        List<Document> resultList = new ArrayList<>(list.size()); 
        for(Object listElement : list) 
        { 
         resultList.add(getDocument((BasicDBObject)listElement)); 
        } 
        value = resultList; 
       } 
       else 
       { 
        value = list; 
       } 
      } 
     } 
     resultMap.put(key, value); 
    } 
    Document result = new Document(resultMap); 
    return result; 
} 
1

possiamo convertire BasicDBObject a Document dal seguente senso

public static Document getDocument(DBObject doc) 
{ 
    if(doc == null) return null; 
    return new Document(doc.toMap()); 
} 

come Document stessa è un'implementazione del Map<String,Object> .

e BasicDBObject può anche essere intercettato in DBObject come BasicDBObject è un'implementazione di DBObject.

@Black_Rider anche per te