Пн go запрос не работает для встроенных документов - PullRequest
0 голосов
/ 02 апреля 2020

Я использую Spring Data Mongo и простой запрос mon go, чтобы получить список отделов активного статуса.

Когда я использовал приведенный ниже запрос, он все равно извлекал записи 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"
        },
        .........
        ..........
        .........
}

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

В решении используется агрегация с MongoDB Spring Data (v2.2.6) MongoTemplate API. Вы не можете получить указанные c элементы массива на основе условия с помощью запроса 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()));
0 голосов
/ 02 апреля 2020
db.getCollection('employee').find({"departments":{"status" : "A"}})
...