2011-09-26 2 views
5

다음 실행 나는 내 컬렉션에 기록을하고 난 ID 1.하지만 1mongodb에서 일치하는 레코드를 찾는 방법은 무엇입니까?

db.mycollection.insert({"person" : [ { "id":1, "details" : { "name" : "Aswini", "Age" : 10 }}, { "id":2, "details" : { "name" : "Mahesh", "Age" : 11}}]}) 

대신에 2 회에 대한 세부 정보를 얻고있는 사람의 정보를 가져 오기 할

> db.mycollection.findOne({"person.id":1},{"person.details":1,"_id":0}) 

{ 
     "person" : 
       [ 
        { 
         "details" : 
         { 
         "name" : "Aswini", 
         "Age" : 10 
         } 
        }, 
        { 
         "details" : 
         { 
         "name" : "Mahesh", 
         "Age" : 11 
         } 
        } 
       ] 
    } 

그러나 다음과 같이 I이 필요합니다 :

결과입니다

{ 
    "person" : [ 
       { 
       "details" : { 
          "name" : "Aswini", 
          "Age" : 10 
         } 
       } 
      ] 
    } 

어디에서 실수하는지 이해하지 마십시오. 도움이 필요해. MongoDB, Java를 사용하고 있습니다.

답변

0

person은 배열입니다. 이 배열의 첫 번째 요소를 얻고 싶은 경우에 당신은이 멀티 레벨 포함 된 문서를 필터링하는 동작입니다 $slice

db.mycollection.findOne({"person.id":1},{"person":{$slice:[0,1]},"_id":0}) 
+0

처럼 될 수있다,

그래서 당신이 처리 할 수있는 스키마를 redesgin해야 (당신이 정말로 기능이 필요한 경우 투표 로그인 해주세요). op는 첫 번째 요소를 원하지 않으므로 위치와 관계없이 일치하는 하위 배열을 검색하려고합니다. person.id 하위 문서가 쿼리 위의 마지막 위치에있는 경우 woek이 표시되지 않습니다. – RameshVel

+0

당신은 절대적으로 옳습니다. 인덱스와 관계없이 하위 배열을 원합니다. 어떤 해결책이 있다면 mongodb에 초보자입니다. – aswininayak

3

사용한다, 일반적으로 일치하는 필터는 전체 문서가 아닌 하위 집합을 반환합니다.

일반적으로 의 하위 문서와 일치하는 데 사용되는 positional operator $입니다. 그러나이 기능은 반환 지정자에서 아직 구현되지 않았습니다.

몽고 Support for positional ($) operator in fields to return specifier에 이미 중요한 문제가 있습니다. 그 잘못이

db.test.insert({"person" : [ { "id":1, "details" : { "name" : "Aswini", "Age" : 10 }}]}) 
db.test.insert({"person" : [ { "id":2, "details" : { "name" : "Mahesh", "Age" : 11}}]}) 

db.test.find({"person.id":1},{'person.details':1}) 
관련 문제