2014-01-29 4 views
0

아래의 쿼리를 생성하기 위해 MongoDB 드라이버를 사용하고 있습니다. 두 코드의 기능이 다른 점은 무엇입니까?MongoDB 자바가 정규식을 사용하여 중첩 된 객체를 찾습니다.

0을 반환합니다. 주소 : { "houseBldgNum"}

db.students.count({ "studentName" : { "$regex" : "(.+)?JAN(.+)?" , "$options" : "i"} , "address" : {"houseBldgNum" : { "$regex" : "(.+)3(.+)?" , "$options" : "i"} }}) 

반환 2; address.houseBldgNum

db.students.count({ "studentName" : { "$regex" : "(.+)?JAN(.+)?" , "$options" : "i"} , "address.houseBldgNum" : { "$regex" : "(.+)3(.+)?" , "$options" : "i"} }) 

데이터 : 내가 두 코드가 같은 결과를 반환해야 함을 기대하지만 아니에요

{ 
    "studentName":"JAN M", 
    "address":{ 
    "houseBldgNum":"3" 
    }, 
    "studentName":"JAN K", 
    "address":{ 
    "houseBldgNum":"35" 
    } 
} 

.

미리 감사드립니다.

답변

0

위에서 제공 한 샘플 데이터에서 "houseBldgNum":"3"은 문서 내의 문서입니다.

{ 
    "studentName":"JAN M", 
    "address":{ 
    "houseBldgNum":"3" 
    } 

는이 address:{"houseBldgNum"}

pair.Like 키 값을 줄 그러나 유 사용해야하는 문서 내에서 문서에 액세스하는 데 충분 하나의 문서 값에 액세스 할 수 있습니다. (점) 표기법을 액세스 할 수 내부 필드.

그래서 올바른 구문은 address.houseBldgNum

+0

답장을 보내 주셔서 감사합니다! 코드에서 보았 듯이 "주소"를 사용했습니다. { "houseBldgNum": { "$ regex": "(. +) 3 (. +)?" , "$ options": "i"}}''단지 주소가 아니라 {{ "houseBldgNum"}' – jzarsuelo

+0

' "주소": { "houseBldgNum"및 주소 : { "houseBldgNum"}'둘 다 키 - 값에 액세스합니다. 'address.houseBldgNum'을 사용하여 주소 내의 값에 액세스해야합니다. { "houseBldgNum": "35" } http://docs.mongodb.org/manual/core/document/ 점 표기법 읽기 이 링크 아래. 이것은 당신을 도울 것입니다 .... – arunb2w

0

두 번째 쿼리는 최상위 문서 안에 포함 된 중첩 된 JSON 문서입니다 "주소"로 작동 사용하는 것입니다. 중첩 된 문서에 액세스하려면 "address.houseBldgNum"이라는 표기법을 따라야합니다.

발췌하여 MongoDB에서 문서 :

점 표기법 MongoDB의 배열의 요소를 액세스하여 하위 문서의 필드를 액세스하는 점 표기법을 사용한다.

은 제로 인덱스 위치에 의해 배열의 요소를 액세스 도트 제로 인덱스 위치에 배열 이름을 연결하고 따옴표 묶 (.) 'array.index' 액세스 할 도트 표기법이있는 하위 문서의 필드는 하위 문서 이름을 점 (.) 및 필드 이름으로 연결하고 따옴표로 묶습니다.

관련 문제