使用Spring Data MongoDB条件构建动态查询 [英] Build dynamic queries with Spring Data MongoDB Criteria

查看:889
本文介绍了使用Spring Data MongoDB条件构建动态查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I would like to run a bulk delete operation on a list of documents in MongoDB that have been selected by the user in the UI so I need to dynamically build a query that looks like the following (the or clause expands for every document selected):

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

现在我正在使用字符串连接来实现这一目标.

Just now I'm using string concatenation to achieve this.

是否可以使用Spring Data MongoDB Criteria Builder(org.springframework.data.mongodb.core.query.Criteria)构建此查询?

Is it possible to build this query with the Spring Data MongoDB Criteria Builder (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()]));

?

这篇关于使用Spring Data MongoDB条件构建动态查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆