我正在Java项目中练习数据库mongoDB。
我有一个集合"对象",它包含所有包含"对象"信息的文档。这些"对象"在Java中被表示为一个名为"LoanboardObject"的类。可以使用web应用程序来创建/更改对象,该应用程序通过Post消息将数据发送到服务器。将创建对象,并将参数存储在对象中。
贷款板对象
public class LoanboardObject implements ILoanBoardEntity {
private ObjectId id;
private String objectName;
private String objectCode;
private String category;
private Boolean lent = false;
private String description = "";
private Boolean enabled = false;
public BasicDBObject toDBObject() {
BasicDBObject object = new BasicDBObject();
object.put("_id", id);
object.put("object_name", objectName);
object.put("object_code", objectCode);
object.put("category", category);
object.put("lent", lent);
object.put("description", description);
object.put("enabled", enabled);
return object;
}
...
}
要将此对象保存到数据库,我执行以下操作:
NewObjectServlet
//Create the object
LoanboardObject object = new LoanboardObject(objectId, etc...);
//Create the database
MongoDataTx tx = new MongoDataTx(DATABASE);
tx.save(object.toDBObject(), "object");
MongoDataTX
private DB db;
public MongoDataTx(String dbName) {
db = Mongo.getMongoDB().getMongoClient().getDB(dbName);
}
public void save(final DBObject object, String collection) {
DBCollection coll = db.getCollection(collection);
coll.save(object);
}
Mongo
private static final String HOST = "localhost";
private static final int PORT = 27017;
private static Mongo mongoDB;
private static MongoClient mongo;
public Mongo() {
try {
mongo = new MongoClient(HOST, PORT);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
public static Mongo getMongoDB() {
if (mongoDB == null) {
mongoDB = new Mongo();
}
return mongoDB;
}
public MongoClient getMongoClient() {
return mongo;
}
问题是当一个值为Null时,它仍然会添加到数据库中(但这不是必要的)。解决此问题的一种方法是检查值是否为Null。
if(id != null){
object.put("_id", id);
}
但是,是否可以给mongodb设置,使其忽略值为Null的键值对?与这里基本相同,但与Java不同。
或者我应该使用一个函数来添加这些值
类似于这个
public BasicDBObject toDBObject() {
addElementToObject("_id", id, object);
addElementToObject("object_name", objectName, object);
addElementToObject("object_code", objectCode, object);
addElementToObject("category", category, object);
...
}
private <T> void addElementToObject(String key, T value, BasicDBObject object) {
if (value != null) {
object.put(key, value);
}
}
可能的复制
不,没有办法告诉MongoDB(或Java驱动程序)忽略null值-null被认为是有效的输入。
在新的Java驱动程序中,可能有一个助手会为您进行null检查,如果值为null,则不会添加字段。新驱动程序还没有发布日期,所以目前最好的办法是自己检查空值。
但是,如果您只使用Java与数据库对话,则为字段添加null值或忽略字段而完全不写入字段是完全相同的——LoanboardObject
中的值仍然为null,这与动态语言完全不同,在动态语言中,您可以避免使用字段。当然,您可以通过不保存null值来节省数据库中的一点空间,但只需很小的值就会增加代码的复杂性。