【问题标题】:How can I query to find mongo entities whose list of sub-entities contain a field matching a string?如何查询以查找其子实体列表包含与字符串匹配的字段的 mongo 实体?
【发布时间】:2014-03-14 17:17:29
【问题描述】:

我有一组如下所示的实体:

public class ClientEntity {

    @Id
    private String id;
    @Indexed(unique = true)
    private String clientId;
    private String name;

    @DBRef
    private List<ClientMachineEntity> machines;

    ...
}

...ClientMachineEntity 的样子:

public class ClientMachineEntity {

    @Id
    private String id;
    @Indexed(unique = true)
    private String clientMachineId;
    private String hostName;

    ...
}

我有一个有效的搜索,通过匹配“clientId”和“name”来找到 ClientEntities:

public List<ClientEntity> searchByIdAndName(String id, String name) {

    Criteria idCriteria = Criteria.where("clientId").regex(id, "i");
    Criteria nameCriteria = Criteria.where("name").regex(name, "i");
    Query query = new Query(new Criteria().orOperator(idCriteria, nameCriteria));
    ...
}

所以我的问题是,如何扩展此搜索以便它也匹配子实体列表中的“clientMachineId”?我尝试添加以下条件:

Criteria machineCriteria = Criteria.where("machines.clientMachineId").regex(id, "i");

...但这不起作用,大概是因为机器是一个实体列表,而不仅仅是一个子实体。

更新:似乎我正在寻找的是 .elemMatch() 功能,但是当我尝试这样做时:

Criteria machineCriteria = Criteria.where("machines").elemMatch(Criteria.where("clientMachineId").regex(id, "i"));

...我收到以下错误:

org.springframework.data.mapping.model.MappingException: No mapping metadata found for class com.mongodb.BasicDBObject

【问题讨论】:

    标签: mongodb mongodb-query spring-data-mongodb


    【解决方案1】:

    您不能通过与DBRef 链接的子实体中的字段进行查询。如果ClientMachineEntity 将嵌入ClientMachine - 那么您可以根据需要使用点符号或$elemMatch

    在您的特定示例中 - 字段 ClientMachineEntity.clientMachineId 不能保存为 _id 并用作主键吗?然后你就可以得到你需要的结果——看看:How to query mongodb with DBRef

    我对使用 Spring Data MongoDB 进行开发的建议是 - 首先学习如何(如果可能的话)使用 MongoDB 控制台在纯 Javascript 中执行此操作,然后学习如何使用 Spring Data MongoDB 执行相同操作。

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 1970-01-01
      • 2013-08-24
      • 1970-01-01
      • 2015-04-30
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多