我正在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构建复杂查询的文章。
答案 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。