Java spring data MongoRepository通过查询整个文档,在插入之前检查文档是否存在

Java spring data MongoRepository通过查询整个文档,在插入之前检查文档是否存在,java,spring,mongodb,Java,Spring,Mongodb,我正在尝试创建一个webservice,它接收一个json对象,并根据该对象是否已经作为文档存在于我的mongodb中来执行一些操作。如果文档已经存在,我必须执行我的操作。如果没有,我必须先插入它,然后执行操作 使用spring data MongoRepository或MongoTemplate,如何检查文档是否已经存在?使用我将要插入的整个文档? 我不能在这里使用身份证。如果整个文档已经存在,我不必插入新文档。但如果至少有一个字段不同,我必须输入一个新文档 例如: @文档(collectio

我正在尝试创建一个webservice,它接收一个json对象,并根据该对象是否已经作为文档存在于我的mongodb中来执行一些操作。如果文档已经存在,我必须执行我的操作。如果没有,我必须先插入它,然后执行操作

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

例如:

@文档(collection=“foo”)
福班{
@身份证
字符串id;
字符串名;
列表地址
…更多属性
}
如果我使用一个没有_id的Foo对象收到请求,我如何检查它是否已经作为文档存在于我的mongodb集合中


谢谢

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

我认为这就是您需要的:您可以指定所有必须匹配的字段,即对于查询中的所有文档必须是唯一的,并将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);
Query query = new Query(Criteria.where("firstName").is("Ruturaj"));
Person p = mongoTemplate.findAndModify(query, update, new FindAndModifyOptions().returnNew(true).upsert(true), Person.class);