【问题标题】:Spring Data Query春季数据查询
【发布时间】:2015-09-24 16:23:23
【问题描述】:

我有一个名为 Archive 的 Mongo DB - Spring 数据文档,具有 iucIdstorageDateTime 属性。现在我将查询具有特定 iucId 的最新存储存档。我不知道如何询问最新的 storageDateTime

询问iucId很简单:

List<Archive> findArchiveByIucId(final String iucId);

但是最近 storageDateTime 的记录是我的问题。

有人可以帮我解决这个问题吗? 非常感谢您的帮助!

@Document(collection = "Archive")
public class Archive {

    @Id
    private String id;
    private String iucId
    private DateTime storageDateTime;

【问题讨论】:

    标签: spring mongodb spring-data


    【解决方案1】:

    以下 mongodb 查询将返回具有特定 iucId 的最新存储存档:

    //The '-1' = sort descending (newest to oldest)
    db.archive.find({iucId: "zzz"}).sort({storageDateTime: -1}).limit(1);
    

    在 Spring 数据中,使用这个:

    import org.springframework.data.domain.Sort;
    import org.springframework.data.mongodb.core.query.Criteria;
    import org.springframework.data.mongodb.core.query.Query;
    import org.springframework.data.mongodb.core.query.Update;
    
        //...
        Query query = new Query();
        query.addCriteria(Criteria.where("iucId").is("zzz"));
        query.limit(1);
        query.with(new Sort(Sort.Direction.DESC, "storageDateTime"));
    
        mongoOperation.find(query, Domain.class);
    

    【讨论】:

      【解决方案2】:

      你可以使用

      Optional<Archive> findFirstByIucIdOrderByStorageDateTimeDesc(final String iucId);
      

      阅读更多here

      【讨论】:

      • 在当前 Spring Data 版本而不是 Archive 中,使用 Optional&lt;Archive&gt; 可能会更好。这提供了对可选操作(并因此使用 Java 8 功能)而不是进行空检查的机会。
      猜你喜欢
      • 1970-01-01
      • 2016-01-30
      • 1970-01-01
      • 2014-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-23
      相关资源
      最近更新 更多