[英]Mongo query is not working for embedded documents
I'm using Spring Data Mongo
and simple mongo query to get the list of Active Status departments.我正在使用
Spring Data Mongo
和简单的 mongo 查询来获取活动状态部门的列表。
When I used below query, it still pulling the InActive
records too.当我使用下面的查询时,它仍然会拉取
InActive
记录。
db.getCollection('employee').find({"departments.status" : "A"})
Sample data -样本数据 -
{
"firstName" : "Sichita",
"lastName" : "Vinchurkar",
"email" : "svinchurkar@gmail.com",
"departments" : [
{
"deptName" : "IT Support",
.......
.......
"status" : "A"
},
{
"deptName" : "Mobile Development",
.......
.......
"status" : "I"
},
{
"deptName" : "Advisory Dept",
.......
.......
"status" : "A"
},
.........
..........
.........
}
db.getCollection('employee').find({"departments":{"status" : "A"}})
The solution is using an aggregation with MongoDB Spring Data (v2.2.6) MongoTemplate
API.解决方案是使用 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).您无法使用
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()));
[ EDIT ADD ] [编辑添加]
Including the import
statements for the classes and interfaces used in the code:包括代码中使用的类和接口的
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.