【问题标题】:How to delete the key/value pair when the Value is of type "Null" (on update)当值的类型为“Null”时如何删除键/值对(更新时)
【发布时间】:2014-04-04 17:12:04
【问题描述】:

我正在一个 Java 项目中使用数据库 mongoDB 进行练习。

我有一个集合“对象”,其中包含有关“对象”信息的所有文档。 这些“对象”在 Java 中用一个名为“LoanboardObject”的类来表示。可以使用 Web 应用程序创建/更改对象,该 Web 应用程序将数据与 Post 消息一起发送到服务器。对象被创建,参数存储在对象中。

LoanBoardObject

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

蒙古人

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 的键值对? basicly same as here 但与 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);
    }
}

Possible dubplication

【问题讨论】:

    标签: java mongodb null key-value-store


    【解决方案1】:

    不,没有办法告诉 MongoDB(或 Java 驱动程序)忽略空值 - 空值被视为有效输入。

    在新的 Java 驱动程序中,可能有一个helper that will do the null check,如果值为空,则不会添加该字段。新驱动程序还没有发布日期,所以现在最好的办法是自己检查空值。

    但是,如果您只使用 Java 与您的数据库通信,则为该字段添加一个空值或忽略该字段并且根本不写入它是完全相同的 - 您的 LoanboardObject 中的值仍然会为空,它与动态语言不同,您可以完全避免使用该字段。当然,不保存空​​值会在数据库中节省一点空间,但会增加代码的复杂性,但价值很小。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-27
      • 2023-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-20
      • 2019-08-12
      相关资源
      最近更新 更多