使用Spring数据MongoDB标准构建动态查询

使用Spring数据MongoDB标准构建动态查询,spring,mongodb,spring-data,spring-data-mongodb,Spring,Mongodb,Spring Data,Spring Data Mongodb,我想对用户在UI中选择的MongoDB中的文档列表运行大容量删除操作,因此我需要动态构建一个如下所示的查询(or子句针对所选的每个文档展开): 刚才我使用字符串连接来实现这一点 是否可以使用SpringDataMongoDB标准构建器(org.springframework.Data.MongoDB.core.query.Criteria)构建此查询?这对您不起作用吗 Criteria criteria = Criteria.where("contentType").is("applicatio

我想对用户在UI中选择的MongoDB中的文档列表运行大容量删除操作,因此我需要动态构建一个如下所示的查询(or子句针对所选的每个文档展开):

刚才我使用字符串连接来实现这一点


是否可以使用SpringDataMongoDB标准构建器(org.springframework.Data.MongoDB.core.query.Criteria)构建此查询?

这对您不起作用吗

Criteria criteria = Criteria.where("contentType").is("application/vnd.sometype");

List<Criteria> docCriterias = new ArrayList<Criteria>(docs.size());

for (Document doc: docs) {
    docCriterias.add(Criteria.where("metadata.name").is(doc.getName())
                               .and("metadata.version").is(doc.getVersion()));
}

criteria = criteria.orOperator(docCriterias.toArray(new Criteria[docs.size()]));
Criteria=Criteria.where(“contentType”)是(“application/vnd.sometype”);
List docCriterias=newarraylist(docs.size());
用于(文档:文档){
add(criterias.where(“metadata.name”).is(doc.getName())
.and(“metadata.version”).is(doc.getVersion());
}
criteria=criteria.orOperator(docCriterias.toArray(新标准[docs.size()]);

这里我们需要构建新查询,并将条件嵌入到构建的新查询中。此外,我们还必须使用一些嵌入查询的条件创建一个条件列表。这里我的示例提供了一个元数据列表,我们不知道将为我们发送的参数的名称。因此,解决方案如下所示

List<Criteria> criterias = new ArrayList<>();

    for (MetaData metaData : newDoc.getMetaData()) {
        Criteria dynamicCriteria = Criteria.where("metaData.key").is(metaData.getKey()).andOperator(Criteria.where("metaData.value").is(metaData.getValue()));
        criterias.add(dynamicCriteria);
    }

    Criteria criteria = new Criteria().andOperator(criterias.toArray(new Criteria[criterias.size()]));

    Query searchQuery = new Query(criteria);

    List<Document> documents = mongoTemplate.find(searchQuery, Document.class);
List criterias=new ArrayList();
for(元数据:newDoc.getMetaData()){
Criteria dynamicCriteria=Criteria.where(“metaData.key”).is(metaData.getKey()).andOperator(Criteria.where(“metaData.value”).is(metaData.getValue());
添加(动态标准);
}
Criteria Criteria=new criterias().andOperator(criterias.toArray(new criterias[criterias.size()]);
查询搜索查询=新查询(条件);
List documents=mongoTemplate.find(searchQuery,Document.class);

@Artem-Bilan-criteria.orOperator(docCriterias.toArray(新标准[docs.size()]);我在将我的条件列表转换为数组时遇到问题,它一直在说orOperator没有为条件[]定义?您能提供帮助吗?请检查您的Spring Data MongoDB版本。尝试使用最新的。我使用的是1.5.0.release它一直说类型条件中的方法或运算符(条件…)不适用于参数(条件[])。您不是误用了
org.hibernate.Criteria
List<Criteria> criterias = new ArrayList<>();

    for (MetaData metaData : newDoc.getMetaData()) {
        Criteria dynamicCriteria = Criteria.where("metaData.key").is(metaData.getKey()).andOperator(Criteria.where("metaData.value").is(metaData.getValue()));
        criterias.add(dynamicCriteria);
    }

    Criteria criteria = new Criteria().andOperator(criterias.toArray(new Criteria[criterias.size()]));

    Query searchQuery = new Query(criteria);

    List<Document> documents = mongoTemplate.find(searchQuery, Document.class);