java - Java Spring-data Mongo中的Mongo DB请求
问题描述
我在文档中有一个数组。
{
"id" : "id_1",
"name" : "name_1";
"additionalData" : [
{
"additionalDataId" : "id_1_1",
"additionalDataName" : "name_1_1",
"longText" : "A long story about..."
},
{
"additionalDataId" : "id_1_2",
"additionalDataName" : "name_1_2",
"longText" : "A longer story about danger..."
},
{
"additionalDataId" : "id_1_3",
"additionalDataName" : "name_1_3",
"longText" : "A longer story about danger and courage"
},
]
}
要检索具有 name 的数组元素"name_1_2"
,我使用 mongo 查询。
db.collection.find( { name: "name_1"},
{ _id: 0, additionalData: { $elemMatch: { "additionalDataName": "name_1_2" } }
})
如何做同样的使用mongoTemplate
?
我努力了
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(
Criteria.where("name").is("name_1").and("additionalData.additionalDataName").is("name_1_2")
),
Aggregation.project("additionalData"),
); mongoTemplate.aggregate(聚合,“CustmObjects”,Object.class);
而且我也尝试使用ArrayOperators.Filter.filter
,我使用了这个答案。
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("name").is("name_1")),
Aggregation.project("additionalData").and(
ArrayOperators.Filter.filter("additionalData").as("item")
.by(ComparisonOperators.valueOf("item.additionalDataName").equalTo("name_1_2"))
)
);
mongoTemplate.aggregate(aggregation, "CustmObjects", Object.class);
https://stackoverflow.com/a/46769125/4587961
无论如何,我得到的结果,数组的所有元素。请帮忙!
解决方案
如果我正确理解了这个问题,这将给出预期的结果。
Query query = new Query(new Criteria().andOperator(
Criteria.where("name").is("name_1"),
Criteria.where("additionalData.additionalDataName").is("name_1_2")
));
query.fields().include("additionalData").exclude("_id");
List<Document> results = template.find(query, collectionName, org.bson.Document.class);
推荐阅读
- sql-server - 列出所有数据库中所有零行的表
- r - 从 r 中的数据框的所有列中删除异常值
- math - 给定元素的当前边界矩形及其变换矩阵,计算未变换元素的边界矩形
- clone - 如何克隆具有可观察属性的对象并自动运行新对象的方法?
- java - 休眠升级期间的mappedby和JoinColumn问题
- jenkins - Jenkins master 需要很长时间才能从 slave 节点收集结果
- flutter - DateFormat 在颤动中显示工作日的错误输出
- api - Lua - 请求通过 curl 工作,但不是通过 Lua(Lua 套接字)?
- javascript - 错误:生成 ENAMETOOLONG ,字符串太长
- python - 使用 Python 将所有列表元素覆盖为字符串?