使用 Spring Data Repository 添加排序到 mongo JSON @Query

发布于 2024-12-09 18:46:11 字数 1874 浏览 0 评论 0原文

我想使用 mongo JSON 查询 并做了一些阅读和实验,我仍然无法让它工作。我有 PagingAndSortingRepository 并可以使用 < findAll 上的 code>Sort() 没有任何问题。

存储库类

public interface ThingRepository extends PagingAndSortingRepository<Thing, ObjectId> {
    @org.springframework.data.mongodb.repository.Query("{ name:?0, $or : [ { state:'new' } , {state:'updated'} ] }")
    List<Device> findThingsInNewOrUpdatedState(String name);
}

服务层

@Service
public class ThingService() {
    @Autowired private ThingRepository thingRepository;

    public List<Thing> getSortedThings() {
        return (List<Thing>)thingRepository.findAll(new Sort(Sort.Direction.DESC, Arrays.asList("dateModified")));
    }

    public List<Thing> getNewOrUpdatedThingsSorted() {
        return thingRepository.findThingsInNewOrUpdatedState(); // <-- this needs to be sorted
    }
}

查询直接转换为 mongoDb 调用,效果很好

db.things.find({ name:'xxx', $or : [ { state:'new' }, {state:'updated'} ] })

,我知道我可以添加 sort() 采用常规 mongoDb 语法,但无法弄清楚该怎么做这是来自 Java/Spring Data 的。它尝试将其添加到 @Query 但它不起作用,因为我认为 Spring 只是执行 <代码>find()

I want to sort the results of a find using the mongo JSON query and having done some reading and experimenting, I still can't get it to work. I have got the PagingAndSortingRepository and can use Sort() on findAll with no problems.

Repository class

public interface ThingRepository extends PagingAndSortingRepository<Thing, ObjectId> {
    @org.springframework.data.mongodb.repository.Query("{ name:?0, $or : [ { state:'new' } , {state:'updated'} ] }")
    List<Device> findThingsInNewOrUpdatedState(String name);
}

Service layer

@Service
public class ThingService() {
    @Autowired private ThingRepository thingRepository;

    public List<Thing> getSortedThings() {
        return (List<Thing>)thingRepository.findAll(new Sort(Sort.Direction.DESC, Arrays.asList("dateModified")));
    }

    public List<Thing> getNewOrUpdatedThingsSorted() {
        return thingRepository.findThingsInNewOrUpdatedState(); // <-- this needs to be sorted
    }
}

The query is translated directly into the mongoDb call, which works fine

db.things.find({ name:'xxx', $or : [ { state:'new' }, {state:'updated'} ] })

and I know I can add a sort() in regular mongoDb syntax but cannot work out how to do this from within Java/Spring Data. It tried adding it to the @Query but it was not working, since I think Spring is just executing a find().

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

森林很绿却致人迷途 2024-12-16 18:46:11

您应该能够简单地向查询方法添加一个 Sort 参数,从而动态地通过管道传入 Sort 实例,该实例将应用于 @Query< 中定义的查询/代码>。

You should be able to simply add a Sort parameter to the query method and thus dynamically pipe in Sort instances that will be applied to the query defined in @Query.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文