java - 带有 spring 数据的 mongodb 查询键值

标签 java spring mongodb spring-boot spring-data-mongodb

我已经开始使用 mongodb 和 spring boot 以及 spring JPA 数据的项目,我意识到我无法将我的数据模型映射到实体并轻松地对其进行查询,所以我有两个问题,

我的数据模型就是这样(只针对一个 Collection)

{
   name: "Name",
   lastName: "Last Name",
   attributes: {
      age: 25
      eye: {
         color: "RED",
         size: "BIG"
      }
   }
}

我的实体是

@Entity // or @Document
public class User{
   private String name;
   private String lastName;
   private Map<String, ?> attributes = new HashMap<>();

   // id or the setter getter are omitted
}
  1. 我可以像以前那样在我的 mongodb 集合中映射 attributes 属性吗 (Map)
  2. 如何进行查询以查找属性?

    我可以这样做吗? List<User> findAllByAttributesAge(Integer age);

最佳答案

今天我在 Spring Mongodb 中遇到了 Map 查询的问题,由于这个问题在 google 中出现了第一个问题,所以我将提供另一个答案。

由于其他答案引用了文档,而该文档没有太多信息,我将举一个例子来说明动态模式的 @Query 注释有多好:

@Query(value = "{'attributes.age' : ?0}")
List<User> findAllByAttributesAge(int age);

此外,您还可以查询眼睛颜色:

@Query(value = "{'attributes.eye.color' : ?0}")
List<User> findAllByAttributesEyeColor(String color);

正如其他答案文档所说,您可以过滤结果,并只接收您喜欢的文档部分:

// It will return the users with only name and last name
@Query(value = "{'attributes.age' : ?0}", fields = "{ name : 1, lastName : 1 }")
List<User> findAllByAttributesAge(int age);

关于java - 带有 spring 数据的 mongodb 查询键值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36793641/

相关文章:

java - 测试用例以确保数据无法加载

java - Azure 应用服务首次请求时速度缓慢

spring - Spring Data 存储库如何知道您的数据库位于何处?

jquery - session 超时后,对第一个请求的后续 AJAX post 请求将抛出 InvalidCsrfTokenException

mongodb - 在 MongoDB 5.0.1 中创建时间序列集合抛出错误 Time-series collection is not enabled

java - Spring RestTemplate : get with nullable paramaeter

java - API 29 中的 AndroidStudio getExternalStoragePublicDirectory

java - 如何从查询字符串中删除查询参数

node.js - mongodb不显示嵌入对象_id

node.js - Mongoose 有条件地填充子文档