2017-02-14 34 views
1

我正嘗試將實體保存爲Mongodb中的文檔並嘗試爲其創建編解碼器。它似乎並不奏效。我嘗試了Morphia,但是,我無法找到使用morphia在運行時在文檔中添加額外字段的文檔。這將違背使用Mongodb的基本目的。 我最初希望我的文檔具有固定數量的POJO字段。與應用程序的運行過程中的字段數應該改變作爲mongodb中的文檔的POJO

任何一個可以建議我該怎麼辦

回答

0

我不知道這是很好的解決方案,但這裏是我做過什麼。 如果你沒有使用Morphia for Mongodb。你希望你的POJO實體被序列化。你可以像下面的代碼所示那樣做。但你如果想對數據進行組織 下面是兩個類給出了一些暗示

package com.mongodbtest.entities; 

import java.io.Serializable; 

import org.bson.Document; 

import org.bson.BsonDocument; 
import org.bson.BsonInt32; 
    import org.bson.BsonNumber; 
import org.bson.BsonString; 

public class User extends BsonDocument { 

/** 
    * 
    */ 
private static final long serialVersionUID = -9167404209850672507L; 
// private String _id; 
private BsonString name; 
private BsonString email; 
private BsonString address; 
private BsonInt32 phno; 

public User(String name, String email, StringBuilder address, Number phno) { 
    super(); 
    this.name = new BsonString(name); 
    this.email = new BsonString(email); 
    this.address = new BsonString(address.toString()); 
    this.phno = new BsonInt32(phno.intValue()); 
} 

public User() { 
} 

public BsonString getName() { 
    return this.name; 
} 

public void setName(String name) { 
    this.name = new BsonString(name); 
    this.append("name", this.name); 

} 

public BsonString getEmail() { 
    return email; 
} 

public void setEmail(String email) { 
    this.email = new BsonString(email); 
    this.append("email", this.email); 
} 

public BsonString getAddress() { 
    return address; 
} 

public void setAddress(StringBuilder address) { 
    this.address = new BsonString(address.toString()); 
    this.append("address", this.address); 
} 

public BsonInt32 getPhno() { 
    return phno; 
} 

public void setPhno(Number phno) { 
    this.phno = new BsonInt32(phno.intValue()); 
    this.append("phno", this.phno); 
} 

} 

和類序列化,這將是這樣

package com.mongodb.sample; 

import org.bson.BsonDocument; 
import org.bson.Document; 

import com.mogodbsample.config.DBconfig; 
import com.mongodb.client.MongoCollection; 
import com.mongodb.client.MongoCursor; 
import com.mongodb.client.MongoDatabase; 
import com.mongodbtest.entities.User; 

public class Firstmongoaccess { 

public static void main(String... args) { 
    MongoDatabase dataase = DBconfig.getdatabase(); 
    MongoCollection<User> collection = dataase.getCollection("users", User.class); 

    User u1 = new User(); 
    u1.setAddress(new StringBuilder("something street bangalore 356322")); 
    u1.setName("xxxxxx"); 
    u1.setEmail("[email protected]"); 
    u1.setPhno(3263433); 

    collection.insertOne(u1); 
    MongoCursor<? extends BsonDocument> cursor = collection.find().iterator(); 
    try { 
     while (cursor.hasNext()) { 
      System.out.println(cursor.next().toJson()); 
     } 
    } finally { 
     cursor.close(); 
    } 

} 
} 
保持setter方法調用序列