2016-12-30 2 views
0

다음과 같이 샘플 JSON이 있습니다. 내가목록에있는 Mongo DB 쿼리 <Map <String, Map <String, String >>>

db.testTable.find처럼 몽고 DB에 ({ "subscriber.id": "123"}) 쿼리 할 수 ​​있어요

{ 
     "subscriber": { 
      "id": "123", 
      "custom_field1": "0", 
      "custom_field2": "0" 
     }, 
     "subscriptions": [{ 
      "12": { 
       "subs_id": "111", 
       "state": "5", 
      } 
     }, { 
      "13": { 
       "subs_id": "222", 
       "state": "8", 
      }, { 
      "14": { 
       "subs_id": "111", 
       "state": "8", 
      } 
     }] 
    } 

;

그리고 위의 쿼리를 사용하여 결과를 얻을 수도 있습니다.

는 이제 = "111"에 가입"subs_id"구성 배열의 데이터를 필터링 할.

제가

아래
같은 시도

db.testTable.find ({ "subscriptions.subs_id": "111"});

이것은 결과가 나지 않습니다. 어떤 사람이 나에게이 일을하는 법을 권할 수 있습니까?

참고 : 본인은 그 목록 <지도 < 문자열,지도 < 문자열, 문자열>>> 형식과 내가지도 객체의 값 부분에 질의하고있다. 그러나 결과를 가져 오는 방법에 대한 단서를 얻을 수 없습니다.

+0

것을 명확히하고 싶습니다. '{ "subs_key": "12", "subs_id": "111", "state": "5", }'와 같은 것일 수도 있고'db.testTable.find ({ "123", "subscriptions.subs_id": "111"}, { "subscription. $": 1}, ' – Veeram

+0

은 sagar의 의견에 동의합니다. mongo가 와일드 카드 필드 이름 검색을 사용한다면 다른 이야기가 있지만 지금은 문서가 필요할 것입니다. 문서에 숫자로 라벨을 지정하는 이유는 무엇입니까? 이유가 있니? –

+0

입력 해 주셔서 감사합니다. 하지만 클라이언트 측에서 오는 입력 데이터 형식을 변경할 수 없습니다. 주어진 형식으로 데이터를 필터링 할 필요가 있습니다. 데이터 조정이없는 제안은 모두 appriciated ..입니다! – Manindar

답변

2

어쩌면 당신은

db.testTable.find({$where : "for(var i in this.subscriptions){for(var j in this.subscriptions[i]){if(this.subscriptions[i][j]['subs_id'] && this.subscriptions[i][j]['subs_id'] === '111'){return true;}}}"}); 

저를 저주하지 마십시오 경우, DB 설계가 IMO에 결함이 $ 사용할 수 있습니다. 효율적이고 즐거운 쿼리를 위해 DB 구조를 다시 생각해야 할 수도 있습니다.

$where 또한 색인을 사용하지 않으므로 기본적으로 모든 문서에서 스캔하므로 비교적 느립니다.

또한 내가 구독 필드는 당신이 포함 된 문서 목록을 변경하여 구독을 고정하려고한다 기본적으로 List<Map<String,Map<String,String>>>

+0

고마워, 잘 작동 해. 자바 코드를 사용하여 유사한 쿼리를 구현하기위한 링크를 제안 할 수 있습니다. – Manindar

+0

글쎄요, 모든 자바 드라이버는 $를 어디에서나 지원합니다. 어느 것을 사용할 지 당신에게 달려 있습니다. 만약 spring-data-mongodb을 사용하고 싶다면 간단한 방법을 찾을 수는 없지만 문자열로 BasicQuery를 만들 수 있습니다. 문자열에서 우리는 find 매개 변수를 가진 전체 절을 전달할 수 있습니다. 예를 들어 223 행 참조 : https://github.com/spring-projects/spring-data-mongodb/blob/master/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/ 저장소/쿼리/StringBasedMongoQueryUnitTests.java –

관련 문제