我在文档内部有一个数组.
I have an array inside of document.
{ "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" }, ] }我要使用mongo查询来检索名称为"name_1_2"的数组元素.
To retrieve element of array with name "name_1_2", I use mongo query.
db.collection.find( { name: "name_1"}, { _id: 0, additionalData: { $elemMatch: { "additionalDataName": "name_1_2" } } })如何使用mongoTemplate执行相同操作?
How to do the same using 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(aggregation,"CustmObjects",Object.class);
); mongoTemplate.aggregate(aggregation, "CustmObjects", Object.class);
我也尝试使用ArrayOperators.Filter.filter,我用了这个答案.
And I also tried to use ArrayOperators.Filter.filter, I used this answer.
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);stackoverflow/a/46769125/4587961
无论如何,我得到的结果是数组的所有元素. 请帮忙!
Anyway, the result I got, all elements of the array. Please, help!
推荐答案如果我正确地理解了这个问题,那么将会得到想要的结果.
If I understood the question correctly, this will give the desired results.
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);更多推荐
Java Spring
发布评论