我使用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}
答案 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"
}