当前位置: 首页 > 知识库问答 >
问题:

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

从渊
2023-03-14

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

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

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

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

如果我使用Foo对象获得一个请求,但没有_id,我如何检查这个对象是否已经作为一个文档存在于mongodb集合中?

谢谢!

共有1个答案

吕翰飞
2023-03-14

我认为这就是您所需要的:查找和修改文档时,您可以指定查询中所有文档必须匹配的所有字段,即必须是唯一的,并将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);
 类似资料:
  • 正如我从“云火数据模型”指南中得到的,“每个文档都由一个名称标识。”是否可以通过该文档标识符(即名称或ID)查询集合? 例如,集合“Things”中的文档具有IDs、1、2等。: 是否可以查询 ID 小于 100 的文档?

  • 主要内容:find() 方法,pretty() 方法,findOne() 方法,条件查询,AND条件语句,OR 条件语句,AND 和 OR 联合使用前面我们介绍了怎么将文档插入到集合中,本节我们来介绍一下如何从集合中查询指定的文档。 find() 方法 想要查询集合中的文档,可以使用 MongoDB 中的 find() 方法,find() 方法可以将查询结果以非结构化的方式展示出来,其语法格式如下: db.collection_name.find(query, projection) 语法说明如

  • 问题内容: 尝试检查我要读取的文件是否存在。 问题答案: 这是另一种方法: 包装的用途和功能: p_DirName in varchar2, – schema object name p_FileName in varchar2 ) return number is l_file_loc bfile; begin l_file_loc := bfilename(upper(p_DirName),

  • 本文向大家介绍MongoDB文档中如何检查特定字段是否存在,包括了MongoDB文档中如何检查特定字段是否存在的使用技巧和注意事项,需要的朋友参考一下 使用MongoDB $exists 检查特定字段是否存在。如果文档中不存在该字段,则需要使用find()显示相同的文档。 让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是获取不包含特定字段

  • 问题内容: 好了,在整日努力梳理头发之后,我决定从社区中获取一些建议。 应该提到的是,我对Elasticsearch还是相当陌生。 我的想法是,我有一个包含一些文档的ES索引,并且仅当尚未索引具有相似字段内容(但不一定等于)的现有文档时,才需要索引新文档。 我可以在多个字段上执行匹配查询并获得查询的全局分数,但是由于该分数不是可用最大分数的百分比,因此我不确定如何设置阈值来确定是否可以插入文档。

  • 问题内容: 可能是一个非常愚蠢的问题,检查elasticsearch中文档的字段是否存在的最佳方法是什么?我在文档中找不到任何内容。 例如,如果该文档没有字段/关键字“ price”,那么我不想返回结果。 {“ updated”:“ 2015/09/17 11:27:27”,“ name”:“ Eye Shadow”,“ format”:“ 1.5 g / 0.05 oz”,} 我可以做什么? 谢