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