【发布时间】: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