【问题标题】:Mongo query is not working for embedded documentsMongo 查询不适用于嵌入式文档
【发布时间】:2020-04-02 10:16:43
【问题描述】:

我正在使用Spring Data Mongo 和简单的 mongo 查询来获取活动状态部门的列表。

当我使用下面的查询时,它仍然会拉动InActive 记录。

db.getCollection('employee').find({"departments.status" : "A"})

样本数据 -

{
    "firstName" : "Sichita",
    "lastName" : "Vinchurkar",
    "email" : "svinchurkar@gmail.com",
    "departments" : [ 
        {
            "deptName" : "IT Support",
            .......
            .......
            "status" : "A"
        }, 
        {
            "deptName" : "Mobile Development",
            .......
            .......
            "status" : "I"
        }, 
        {
            "deptName" : "Advisory Dept",
            .......
            .......
            "status" : "A"
        },
        .........
        ..........
        .........
}

【问题讨论】:

    标签: mongodb spring-data-mongodb


    【解决方案1】:

    解决方案是使用 MongoDB Spring Data (v2.2.6) MongoTemplate API 的聚合。您不能使用 find 查询(因此使用聚合的 $filter 数组运算符)基于条件检索特定的数组元素。

    MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "test");
    Aggregation agg = newAggregation(
        match(Criteria.where("departments.status").is("A")),
        project()
            .and(filter("departments")
                    .as("dept")
                    .by(Eq.valueOf("dept.status").equalToValue("A")))
        .as("departments")
    );
    
    AggregationResults<Document> results = mongoOps.aggregate(agg, "collection", Document.class);
    results.forEach(doc -> System.out.println(doc.toJson()));
    


    [编辑添加]

    包括代码中使用的类和接口的import 语句:

    import org.springframework.data.mongodb.core.MongoOperations;
    import org.springframework.data.mongodb.core.MongoTemplate;
    import org.springframework.data.mongodb.core.aggregation.Aggregation;
    import org.springframework.data.mongodb.core.aggregation.AggregationResults;
    
    import static org.springframework.data.mongodb.core.aggregation.Aggregation.newAggregation;
    import static org.springframework.data.mongodb.core.aggregation.Aggregation.match;
    import static org.springframework.data.mongodb.core.aggregation.Aggregation.project;
    import static org.springframework.data.mongodb.core.aggregation.ArrayOperators.Filter.filter;
    import static org.springframework.data.mongodb.core.aggregation.ComparisonOperators.Eq;
    

    【讨论】:

    【解决方案2】:
    db.getCollection('employee').find({"departments":{"status" : "A"}})
    

    【讨论】:

      猜你喜欢
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 2019-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多