我正在尝试创建一个接收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集合中的文档存在?
谢谢!
答案 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获得的内容进行比较。如果您无法确定请求中将传递的内容,则可能必须根据传递的字段查询数据库。