2015-08-12 3 views
7

w sterowniku wersji Java Mongo 3 DB API uległa zmianie w stosunku do wersji 2. Tak jak ten kod nie skompilować już:Jak przekonwertować plik BasicDBObject na dokument Mongo za pomocą sterownika Java Mongo DB w wersji 3?

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

Kolekcja wkładka działa tylko z Mongo dokumentu.

czynienia ze starym kodem muszę zadać pytanie:

Jaki jest najlepszy sposób przekonwertować BasicDBObject do dokumentu?

+1

Możesz zobaczyć [to] (http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/crud/#codecregistry) –

Odpowiedz

0

Dokument jest bardzo podobny do BasicDBObject. Nie jestem do końca pewien, co masz na myśli, aby przekonwertować BasicDBObjects na dokumenty, ale obiekt Document dostarcza bardzo użytecznych metod.

Document.parse (ciąg) zwróci dokument, jeśli zostanie załadowany w ciągu JSON.

Document.append ("key", Value) doda do pól dokumentu.

Co do kodu w swoim poście, to powinien skompilować z wersji 3:

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

Zobacz

Java Driver 3.0 Guide

i

MongoDB Java Driver 3.0 Documentation

+0

Co otrzymałem obiekt BasicDBObject ze starej metody, a następnie chcę go wstawić? –

+1

Możesz zrobić Dokument doc = Document.parse (YourBasicDBObject.toString()); – dbenson

5

myślę najprostszy Rzeczą do zrobienia jest po prostu zmiana Twój kod użyje Dokumentu w przeciwieństwie do BasicDBObject.

Więc zmienić

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

Aby

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")); 

a następnie wstawić do kolekcji

coll.insertOne(doc); 

Musisz zmienić inne fragmenty kodu do pracy z 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

Możemy Konwersja BasicDBObject do Document przez następujący sposób

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

jako Document sama jest implementacją Map<String,Object> .

i BasicDBObject może być również złapać w DBObject jako BasicDBObject jest realizacją DBObject.

@Black_Rider dla ciebie zbyt