【问题标题】:spring data MongoRepository check if a document exists before inserting by querying with entire documentspring data MongoRepository 通过查询整个文档在插入之前检查文档是否存在
【发布时间】:2014-06-26 15:59:17
【问题描述】:

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

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

例如:

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

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

如果我使用没有 _id 的 Foo 对象收到请求,如何检查它是否已作为文档存在于我的 mongodb 集合中?

谢谢!

【问题讨论】:

    标签: java spring mongodb


    【解决方案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);
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-08
        • 1970-01-01
        • 2012-07-02
        相关资源
        最近更新 更多