Mongo 查询不适用于嵌入式文档 [英] Mongo query is not working for embedded documents

查看:35
本文介绍了Mongo 查询不适用于嵌入式文档的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm using Spring Data Mongo and simple mongo query to get the list of Active Status departments.

当我使用下面的查询时,它仍然拉取 InActive 记录.

When I used below query, it still pulling the InActive records too.

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 (v2.2.6) MongoTemplate API.您无法使用 find 查询(因此使用聚合的 $filter 数组运算符)基于条件检索特定数组元素.

The solution is using an aggregation with MongoDB Spring Data (v2.2.6) MongoTemplate API. You cannot retrieve specific array elements based a condition using a find query (so using the aggregation's $filter array operator).

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语句:

Including the import statements for the classes and interfaces used in the code:

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;

这篇关于Mongo 查询不适用于嵌入式文档的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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