当前位置: 首页 > 知识库问答 >
问题:

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

阎德宇
2023-03-14

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

{
    $and: [
        {
            "contentType": "application/vnd.sometype"
        },
        {
            $or: [
                {
                    "metadata.name": "someName",
                    "metadata.version": "someVersion"
                },
                {
                    "metadata.name": "someOtherName",
                    "metadata.version": "someOtherVersion"
                }
            ]
        }
    ]
},
Fields: null,
Sort: null

刚才我正在使用字符串串联来实现这一点。

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

共有2个答案

融伯寅
2023-03-14

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

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);
郜驰
2023-03-14

这对你不起作用吗?

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()]));

 类似资料:
  • 我试图搜索一个列表包含另一个列表与MongoDB。 我将使用字符串列表进行搜索。假设列表L=[1,2,3,4,5] 例如,对于给定的列表L=[1,2,3,4,5],我希望返回带有_id1和2的文档。3不能返回,因为6不在L中。 我找到了两个解决方案 一 二 由于我想使用Spring Data MongoDb Criterias,我尝试编写上述解决方案,但代码似乎不起作用,它返回所有文档

  • Spring-Data-MongoDB。我如何使用spring-data-mongodb库在mongo中动态创建数据库? 我试图使用Spring-Mongodb-Data模块对Mongo数据库进行CRUD操作,通过示例和文章,我的假设是在定义MongoTemplate bean时应该在spring上下文xml中预定义databasename。 请帮帮我. 谢谢-RK

  • 问题内容: 我正在使用PDO,并希望执行以下操作: PDO是否允许我这样绑定表名和列名?这 似乎是 允许的,但是却让我周围的报价参数,即使我用PDO :: PARAM_INT或PDO :: PARAM_BOOL作为数据类型。 如果这不起作用,如何安全地对变量进行转义,以便可以在查询中对它们进行插值? 问题答案: 不幸的是,您不能按列名绑定参数。 您可以尝试动态创建SQL命令: 只要确保对参数/变量

  • 我想做一些有趣的事情,我希望能够动态地构建SQL查询过滤器使用Spring Boot 1.5.9和Spring Data Rest,而不需要编写控制器。我觉得我可能走在正确的道路上,但我有点卡住了。 这个想法是通过使用HandlerInterceptorAdapter截取HTTP请求GET方法,并将请求查询参数存储到PagingAndSortingRepository可以使用的对象中。计划是重写S

  • 我已经将我的一些从移植到文档,现在移植我的一些查询。这是JPA查询: 以下是我的尝试: 此查询返回零大小的arraylist。然后,我将或更改为使用is子句,并确保变量中包含的数据作为后缀和前缀。那也不管用。 但是来自和客户端的查询: 返回数据。 问题1:如何使用spring数据mongo标准编写LIKE子句<问题2:这是在标准中使用or and子句的正确方法吗 感谢阅读

  • Spring数据中是否有一种方法可以动态地形成where子句? 我想要做的是有一个方法(类似于findBy/get方法),它运行WHERE和and并使用所提到的属性,这些属性不是空的。 例如, 我们的方法如下所示 谢了。