2015-08-12 12 views
7

Trong trình điều khiển phiên bản Java Mongo DB 3 API đã thay đổi so với phiên bản 2. Vì vậy, một mã như thế này không biên dịch nữa:Làm thế nào để chuyển đổi BasicDBObject thành Tài liệu Mongo bằng trình điều khiển Java Mongo DB phiên bản 3?

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

Tập chèn chỉ làm việc với một tài liệu Mongo.

Đối phó với các mã cũ tôi cần phải đặt câu hỏi:

cách tốt nhất để chuyển đổi một BasicDBObject đến một tài liệu là gì?

+1

Bạn có thể muốn xem [này] (http://mongodb.github.io/mongo-java-driver/3.0/driver/reference/crud/#codecregistry) –

Trả lời

0

Tài liệu rất giống với BasicDBObject. Tôi không hoàn toàn chắc chắn những gì bạn đang đề cập đến như là một cách để chuyển đổi BasicDBObjects để tài liệu, nhưng đối tượng tài liệu cung cấp một số phương pháp rất hữu ích.

Document.parse (chuỗi) sẽ trả lại Tài liệu nếu bạn nạp nó vào chuỗi JSON.

Document.append ("key", Value) sẽ thêm vào các trường của Tài liệu.

Đối với các mã trong bài viết của bạn, điều này sẽ biên dịch với phiên bản 3:

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

Xem

Java Driver 3.0 Guide

MongoDB Java Driver 3.0 Documentation

+0

Tôi nhận được BasicDBObject từ phương thức cũ và sau đó tôi muốn chèn nó là gì? –

+1

Bạn có thể làm Document doc = Document.parse (YourBasicDBObject.toString()); – dbenson

5

Tôi nghĩ đơn giản nhất điều cần làm là thay đổi mã của bạn để sử dụng Tài liệu trái ngược với BasicDBObject.

Vì vậy, thay đổi

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

Để

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

và sau đó chèn vào bộ sưu tập

coll.insertOne(doc); 

Bạn sẽ cần phải thay đổi bit khác của mã để làm việc với 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

Chúng tôi có thể chuyển đổi BasicDBObject để Document bằng cách sau

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

như Document chính nó là một thực hiện Map<String,Object> .

BasicDBObject cũng có thể bị bắt trong DBObjectBasicDBObject là triển khai DBObject.

@Black_Rider cho bạn quá

Các vấn đề liên quan