Mongo 查询不适用于嵌入式文档
Mongo query is not working for embedded documents
我正在使用 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"
},
.........
..........
.........
}
db.getCollection('employee').find({"departments":{"status" : "A"}})
解决方案是使用 MongoDB Spring 数据 (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;
我正在使用 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"
},
.........
..........
.........
}
db.getCollection('employee').find({"departments":{"status" : "A"}})
解决方案是使用 MongoDB Spring 数据 (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;