Mongodb 如何查询以查找子实体列表中包含与字符串匹配的字段的mongo实体?

Mongodb 如何查询以查找子实体列表中包含与字符串匹配的字段的mongo实体?,mongodb,mongodb-query,spring-data-mongodb,Mongodb,Mongodb Query,Spring Data Mongodb,我有一个实体集合,如下所示: public class ClientEntity { @Id private String id; @Indexed(unique = true) private String clientId; private String name; @DBRef private List<ClientMachineEntity> machines; ... } 我有一个工作搜索,通过匹配“c

我有一个实体集合,如下所示:

public class ClientEntity {

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

    @DBRef
    private List<ClientMachineEntity> machines;

    ...
}
我有一个工作搜索,通过匹配“clientId”和“name”来查找客户:

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

更新:看起来我想要的是.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

不能按与
DBRef
链接的子实体中的字段进行查询。如果
ClientMachineEntity
将嵌入到
ClientMachine
中,则可以根据需要使用点表示法或
$elemMatch

在您的特定示例中-不能将字段
ClientMachineEntity.clientmachineeid
另存为_id并用作主键吗?然后你可以得到你需要的结果-看看:

我对使用SpringDataMongoDB进行开发的建议是:首先学习如何(如果可能的话)使用MongoDB控制台在纯Javascript中进行开发,然后学习如何使用SpringDataMongoDB进行开发

Criteria machineCriteria = Criteria.where("machines.clientMachineId").regex(id, "i");
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