Java Spring

编程入门 行业动态 更新时间:2024-10-26 14:30:29
本文介绍了Java Spring-data Mongo中的Mongo DB请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我在文档内部有一个数组.

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

本文发布于:2023-11-22 21:04:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1619017.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Java   Spring

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!