2017-05-08 59 views
1

我已存儲的一些數據作爲彈簧mongodb的查找文件如果單個場在列表

{ 
    "_id" : ObjectId("abc"), 
    "_class" : "com.xxx.Team", 
    "name" : "Team 1", 
    "members" : [ 
     {"userId" : 1, "email" : "[email protected]" }, 
     {"userId" : 2, "email" : "[email protected]" }, 
    ] 
} 
{ 
    "_id" : ObjectId("xyz"), 
    "_class" : "com.xxx.Team", 
    "name" : "Team 2", 
    "members" : [ 
     {"userId" : 2, "email" : "[email protected]" }, 
     {"userId" : 3, "email" : "[email protected]" } 
    ] 
} 

我有2 POJO類Team(映射到整個文檔)的文檔內相匹配,TeamMember(映射到members內部一個文件)。

現在我想找到特定用戶屬於哪個團隊。例如,如果我搜索[email protected]它應該返回我的文檔團隊1。同樣搜索[email protected]應將它們都作爲它們在兩個文檔中返回。

由於我對春天很陌生,無法找出如何解決這個問題。

注:我使用MongoTemplate

+0

?更新您的問題與您的pojo類(團隊和團隊成員) – pvpkiran

+0

@pvpkiran我正在使用MongoTemplate – BiJ

回答

0

可以是使用了Spring的數據倉庫或MongoTemplate來查詢數據庫下面的代碼使用與MongoTemplate

Query findQuery = new Query(); 
Criteria findCriteria = Criteria.where("members.email").is("[email protected]"); 
findQuery.addCriteria(findCriteria); 
List<Team> teams = mongoTemplate.find(findQuery, Team.class); 
1

財產以後這樣會做

final QueryBuilder queryBuilder = QueryBuilder.start(); 
//queryBuilder.and("members.email").is("[email protected]") This will work as well. try it out. 
    queryBuilder.and("members.email").in(Arrays.asList("[email protected]")) 

final BasicDBObject projection = new BasicDBObject(); 
     projection.put("fieldRequired", 1); 


try (final DBCursor cursor = mongoTemplate.getCollection(collectionName).find(queryBuilder.get(), projection) 
      .batchSize(this.readBatchSize)) { 
      while (cursor.hasNext()) { 
       DBObject next = cursor.next(); 
       ........ 
       // read the fields using next.get("field") 
       ......... 
      } 
     } 

BATCHSIZE和投影是不是強制性的。如果您不想獲取整個文檔,請使用投影。您可以指定要在結果中提取文檔中的哪個字段。