2011-04-10 10 views
3

에 대한 정규식 쿼리를 수행하는 방법 이것은 약간 까다 롭습니다. 어떻게 ObjectId 필드에서 정규식 쿼리를 수행합니까? 난 자바 API를 사용하고mongodb ObjectId 필드

은, 그래서 이것은 내가 지금까지

BasicDBObject q = new BasicDBObject() 
q.put(field, Pattern.compile(value, Pattern.CASE_INSENSITIVE)); 

이 정규 필드에 대해 잘 작동이 것입니다. ObjectId 필드에서는 작동하지 않는 것 같습니다. 내가 ObjectId를 문자열과 비교할 수 없기 때문에 나는 가정합니까? 그리고 난 정확히 그냥 부분 id 또는 정규식을 새 ObjectId에 넣을 수는 없습니다. 그냥 오류가 발생합니다.

이것에 대한 아이디어가 있으십니까? 나는 사용자에게 ID의 일부를 입력하고 그 패턴을 가진 모든 문서를 되돌릴 수있는 방법을 제공하려고 노력하고있다.

미리 감사드립니다.

+2

정규식으로 objectid를 검색하면 실제로 의미가 없습니다. –

답변

4

내가 아는 한 ObjectId는 MongoDB의 자체 유형이며 문자열처럼 작동하지 않습니다. 그리고 string과는 다른 MongoDB에는 배열과 같은 다른 유형이 있지만 정규 표현식 패턴으로 검색 할 수 있습니다. ObjectId에서는 불가능합니다. 당신과 같은 ID 검색을 구현하려면 id를 간단한 문자열과 cold-shoulder ObjectId로 포함하는 색인 ​​된 id 필드를 정의해야합니다.

+0

글쎄, 당신은 항상 문자열로 objectid를 저장하고 쿼리 할 수 ​​있습니다. 이 접근법의 실제적인 사용은 의심의 여지가 없습니다. –

+0

그래, 나는 똑같은 생각을하고 있었다. ... 최악의 경우, 나는 문자열로서 objectid를 가진 새로운 필드를 저장해야한다. – Khon

+2

Rocky is correct; 우리는 ObjectId를 MongoDB의 특별한 유형으로 저장합니다. 특히, ObjectId의 네이티브 표현은, 스트링 버젼보다 컴팩트하게 보존됩니다. _id의 값으로 ObjectId를 사용할 필요가 없음을 기억하십시오. 문서를 포함하여 모든 유효한 유형이 될 수 있습니다. RE 일치를 수행해야하는 경우 diff 유형을 고려해야합니다. 그러나 '^'가 고정되어 있지 않으면 RE 일치가 색인을 히트하지 않는다는 것을 기억하십시오. –

관련 문제