spring数据MongoRepository通过查询整个文档来检查文档是否存在

时间:2014-06-26 15:59:18

标签: java spring mongodb

我正在尝试创建一个接收json对象的web服务,并根据对象是否已作为mongodb中的文档存在而执行某些操作。如果文档已经存在,我必须执行我的操作。如果不是,我必须先插入然后再执行操作。

使用spring数据MongoRepository或MongoTemplate,如何检查文档是否已经存在 - 使用我要插入的整个文档? 我不能在这里使用_id。如果整个文档已经存在,我不必插入新文档。但如果至少有一个字段不同,我必须输入一个新文档。

例如:

@Document (collection = "foo")
class Foo {

   @Id
   String id;
   String name;
   List<Address> address   
   ... many more attributes
}

如果我在没有_id的情况下使用Foo对象获取请求,如何检查这是否已作为mongodb集合中的文档存在?

谢谢!

2 个答案:

答案 0 :(得分:1)

我认为这就是您所需要的:Finding and modifying documents您可以指定必须匹配的所有字段,即对于查询中的所有文档必须是唯一的,并将upsert选项设置为true,如下所示:

Query query = new Query(Criteria.where("firstName").is("Ruturaj"));
Person p = mongoTemplate.findAndModify(query, update, new FindAndModifyOptions().returnNew(true).upsert(true), Person.class);

答案 1 :(得分:0)

为什么不在某些字段上为您的收藏编制索引?假设您在所有文档中都有名称,请按名称查询数据库,如果没有得到任何结果,请添加它。如果您得到一个结果,请将其与您在请求中的结果进行比较。比较这两个方法最好的办法是覆盖equals方法。将请求主体转换为文档的对象,并将其与从DB获得的内容进行比较。如果您无法确定请求中将传递的内容,则可能必须根据传递的字段查询数据库。