【问题标题】:How to frame a query using @Query annotation?如何使用@Query 注解构建查询?
【发布时间】:2012-08-30 13:33:26
【问题描述】:

有没有办法使用 spring-data mongo @Query 注释来表示下面的查询。

db.users.find({userName: "titogeo"}, {requests: 1, _id:0})

上面的查询输出在控制台是

请求“:[{“谁”:“blahblahblah1”,
“谁”:“blahblahblah2”,
“什么”:“请求”,
“何时”:ISODate(“2012-09-05T17:52:14.339Z”) } ] }

我尝试了以下但没有奏效。

@Query("{userName: ?0}, {requests:1, _id:0}")
public Page<AddRequest> getAllFriendRequests(String userName, Pageable pageable);

集合 users 具有 User 对象, requests 是一个列表,其中包含 AddRequest 对象。

当我执行上述方法时,我得到一个空白列表。任何帮助表示赞赏。

还有关于 spring-data-mongo api 的好的参考网站或书籍吗?

【问题讨论】:

    标签: java mongodb spring-data spring-mongo


    【解决方案1】:

    由于您使用过滤器属性来限制返回的属性集(仅请求),因此您需要使用以下语法中的属性关键字:

    @Query(value = "{ 'userName' : ?0 }", fields = "{ 'requests': 1, '_id': 0 }")
    public Page<AddRequest> getAllFriendRequests(String userName, Pageable pageable);
    

    这里是一个对 spring-data mongodb 有用的站点:http://static.springsource.org/spring-data/data-document/docs/current/reference/html/

    【讨论】:

    • 谢谢!我将在几个小时内尝试并更新结果。与其他方式相比,这种基于 JSON 的 @query 方法在性能方面是否有任何劣势或优势?
    • 我尝试了代码,但没有工作。仍然得到一个空列表。我调用方法如下userDocumentRepository.getAllFriendRequests(userName, new PageRequest(0, 3));
    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 2020-12-13
    • 2020-11-19
    • 2021-12-22
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多