0

我有以下结构的文档集合所选对象:如何获得仅从阵列

{ 
    "category": "movies", 
    "movies": [ 
     { 
      "name": "HarryPotter", 
      "language": "english" 
     }, 
     { 
      "name": "Fana", 
      "language": "hindi" 
     } 
    ] 
} 

我想用电影name="fana"查询和响应sholud是

{ 
    "category": "movies", 
    "movies": [ 
     { 
      "name": "HarryPotter", 
      "language": "english" 
     } 
    ] 
} 

如何使用spring mongoTemplate获得以上内容吗?

回答

0

你可以尝试这样的事情。

非聚合基础的方法:基于

public MovieCollection getMoviesByName() { 
    BasicDBObject fields = new BasicDBObject("category", 1).append("movies", new BasicDBObject("$elemMatch", new BasicDBObject("name", "Fana").append("size", new BasicDBObject("$lt", 3)))); 
    BasicQuery query = new BasicQuery(new BasicDBObject(), fields); 
    MovieCollection groupResults = mongoTemplate.findOne(query, MovieCollection.class); 
    return groupResults; 
} 

聚合方法:

import static org.springframework.data.mongodb.core.aggregation.Aggregation.*; 
import static org.springframework.data.mongodb.core.query.Criteria.where; 

public List<BasicDBObject> getMoviesByName() { 
    Aggregation aggregation = newAggregation(unwind("movies"), match(where("movies.name").is("Fana").and("movies.size").lt(1)), 
     project(fields().and("category", "$category").and("movies", "$movies"))); 
    AggregationResults<BasicDBObject> groupResults = mongoTemplate.aggregate(
     aggregation, "movieCollection", BasicDBObject.class); 
    return groupResults.getMappedResults(); 
} 
+0

感谢Veeram兄弟...其工作 –

+0

嗨Veeram,现在电影大小添加在电影阵列,如何检查不足条件 –

+0

答案更新。 – Veeram

0

$unwind mongodb聚合可用于此。

db.Collection.aggregate([{ 
    {$unwind : 'movies'}, 
    {$match :{'movies.name' : 'fana'}} 
    }]) 

您可以尝试上述查询以获取所需的输出。

+0

感谢您的答复。如何实现它在mongotemplate –

+0

请告诉我如何在春季mongotemplate实现 –