【发布时间】:2017-11-11 11:00:56
【问题描述】:
我正在使用带有 MongoDB 的 Spring Data 来保存一些文档。保存文档时,我希望 Mongo 不包含空对象。 (如何)这可以实现?
假设我有以下主要课程:
@Document(collection = "main_doc")
public class MainDoc {
@Id
private String id;
private String title;
private SubDoc subDoc;
}
包含以下类的对象:
public class SubDoc {
private String title;
private String info;
}
现在,如果我尝试保存以下对象:
MainDoc main = new MainDoc();
main.setTitle("someTitle");
main.setSubDoc(new SubDoc());
注意:实际上我无法控制 SubDoc 是这样设置的事实。它可以是空的,也可以是填充的。我想要的是,如果一个元素的属性/字段都是 NULL,它根本不会存储在 mongo 中。 这会在 mongo 中产生类似的结果:
{
"_id" : "5a328f9a-6118-403b-a3a0-a55ce52099f3",
"title": "someTitle",
"subDoc": {}
}
我想要的是,如果一个元素只包含空属性,它们根本不会被保存,所以对于上面的例子,我想要以下结果:
{
"_id" : "5a328f9a-6118-403b-a3a0-a55ce52099f3",
"title": "someTitle"
}
文档的保存是在存储库的帮助下完成的,如下所示:
@NoRepositoryBean
public interface MainRepo extends CrudRepository<MainDoc, String> {
// save inherited
}
提前致谢。
【问题讨论】:
-
不要调用
main.setSubDoc(new SubDoc());您将其设置为空。如果您不调用它,那么它将不存在。 -
是的,但在我的实际用例中,我无法控制那部分。我真的需要在映射期间完成它。抱歉,应该更清楚一点。
-
那您的问题能更具体一点吗?在我看来,如果没有数据可以放在那里,你根本就不要打电话。也许您的代码中需要
if。 -
事实上,我的对象是从大量嵌套查询构建到关系数据库,然后保存到 mongo DB。如果使用的嵌套对象为空,每次都必须检查,这意味着大量的检查。这就是为什么我更愿意让映射为我完成这项工作。
-
详细信息在您的问题中。 Edit Your Question 并且不要发布长的 cmets。
标签: mongodb spring-data-mongodb