Spring Data mongo将空值插入DB

时间:2016-12-13 01:57:24

标签: java mongodb spring-data-mongodb spring-mongo

我使用Spring数据mongo将记录插入Mongo,

这是我的代码 mongoTemplate.save(人, “personCollection”);

这是我的人物对象

public class Person implements Serializable {
   int age;
   String address;
   String name;

//Getters and setters including hashcode and equals
}

我的地址在这里为空,在集合中插入记录后,数据只填充年龄和名称

我知道mongodb将null值和noKey视为同一个东西,但我的要求是甚至填充地址:null以使模式一致我如何使用Spring Data mongo

当前o / p:{“年龄”:21,“名称”:“john Doe”}

预期o / p:{“age”:21,“name”:“john Doe”,“address”:null}

2 个答案:

答案 0 :(得分:3)

与RDBMS相比,NoSQL DB以不同的方式工作。     文件{"年龄":21,"名称":" john Doe"}与{"年龄":21,&#相同34;姓名":" john Doe&#34 ;;"地址":null}

而不是将密钥存储为null,以便不存储密钥,这样可以提高对数据库的读取/更新性能。     但是,如果你的用例仍然需要输入null,因为它可能会将你的POJO转换为BSONObject,然后将BSONObject保存在MongoDB中。

这是一个例子(但是它只是一个可以解决问题的工作)

BSONObject personBsonObj = BasicDBObjectBuilder.start()
                .add("name","John Doe")
                .add("age",21)
                .add("address",null).get();


 if you are using spring data mongo use

mongoTemplate.insert(personBsonObj,"personCollection");
document in the db:
db.personCollection.findOne().pretty();
{"age":21,"name":"John Doe";"address":null}*

答案 1 :(得分:0)

我已经使用下面的代码解决了这个问题

final Document document = new Document();
document.put("test1", "test1");
document.put("test2", null);
document.put("test3", "test3");
mongoTemplate.getCollection("your-collection-name").insert(document);

在这里,我不是使用BSONObject,而是使用Document对象,它工作正常。

文档已插入数据库

{
    "_id" : ObjectId("some-id"),
    "test1" : "test1",
    "test2" : null,
    "test3" : "test3"
}