繁体   English   中英

具有正则表达式过滤器的MongoDB Java驱动程序聚合

[英]MongoDB Java Driver aggregation with regex filter

我正在使用MongoDB Java驱动程序3.6.3。 我想通过聚合创建正则表达式查询以检索不同的值。

假设我有json:

[{
  "name": "John Snow",
  "category": 1
},
{
  "name": "Jason Statham",
  "category": 2
},
{
  "name": "John Lennon",
  "category": 2
},
{
  "name": "John Snow",
  "category": 3
}]

我想创建正则表达式像“ John。*”的查询并按名称分组,这样就只有一个“ John Snow”

预期结果是:

[{
  "name": "John Snow",
  "category": 1
},
{
  "name": "John Lennon",
  "category": 2
}]

根据Mongo Shell命令, felix提供的答案是正确的。 使用MongoDB Java驱动程序的该命令的等效表达式为:

MongoClient mongoClient = ...;

MongoCollection<Document> collection = mongoClient.getDatabase("...").getCollection("...");

AggregateIterable<Document> documents = collection.aggregate(Arrays.asList(

    // Java equivalent of the $match stage
    Aggregates.match(Filters.regex("name", "John")),

    // Java equivalent of the $group stage
    Aggregates.group("$name", Accumulators.first("category", "$category"))

));

for (Document document : documents) {
    System.out.println(document.toJson());
}

上面的代码将打印出来:

{ "_id" : "John Lennon", "category" : 2 }  
{ "_id" : "John Snow", "category" : 1 }  

您可以在$match阶段使用$regex ,然后再进行$group阶段来实现此目的:

db.collection.aggregate([{
    "$match": {
        "name": {
            "$regex": "john",
            "$options": "i"
        }
    }
}, {
    "$group": {
        "_id": "$name",
        "category": {
            "$first": "$category"
        }
    }
}])

输出:

[
  {
    "_id": "John Lennon",
    "category": 2
  },
  {
    "_id": "John Snow",
    "category": 1
  }
]

您可以在这里尝试: mongoplayground.net/p/evw6DP_574r

您可以使用Spring Data Mongo

像这样

    Aggregation agg = Aggregation.newAggregation(
        ggregation.match(ctr.orOperator(Criteria.where("name").regex("john", "i")),
                Aggregation.group("name", "category")
        );
          AggregationResults<CatalogNoArray> aggResults = mongoTemp.aggregate(agg, "demo",demo.class);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM