我如何在Spring Boot中对MongoDB执行更高级的查询

时间:2018-12-18 08:25:00

标签: mongodb spring-boot

我正在Spring Boot应用程序中从Postgres切换到MongoDB。我很荣幸能够通过@Query注释使用本机查询来查询数据库:

@Query(value = "SELECT id\n" +
        "FROM ( \n" +
        "SELECT DISTINCT CASE sender WHEN 1 THEN recipient ELSE sender END AS friend_id \n" +
        "FROM friendrequest WHERE 1 IN (recipient, sender) \n" +
"AND friendrequeststatus = 'ACCEPTED' \n" +
        ") f \n" +
        "LEFT JOIN users u\n" +
        "ON f.friend_id = u.id\n" +
        "ORDER BY friend_id \n-- #pageable\n"
        ,nativeQuery = true)
Page<User> getFriends(Pageable pageable);

目前,我正在使用相同的模型切换到MongoDB和Inam。是否可以使用@Query方法编写高级本机查询,还是我只能使用Query对象?

    user = mongoTemplate.findOne(
  Query.query(Criteria.where("name").is("Jack")), User.class);

我问这个问题是因为我没有看过任何有关使用MongoDB和Spring Boot构建复杂查询的文章。

1 个答案:

答案 0 :(得分:0)

首先,您需要了解RDBMS和NoSQl之间的区别。您可以参考this question

查询时,SQL和NoSQL之间有相当大的区别。例如,MySQl具有select个查询关键字,而MongoDb具有find({})个功能来获取相同的输出。

尽管MongoDb的早期版本无法执行聚合,等效于SQL连接查询,但最新版本(> = 3.2)允许$lookup中的聚合。请参见Documentation。另外,MongoDb聚合将有助于解决问题中给出的代码。

了解NoSql和MongoDb之后,您可以将Spring MongoDB用于复杂的查询。在Spring和MongoDb上进行简短的锻炼,以检查answer