2017-11-21 13 views
0

에 $로 정규식 :MongoDB의 자바 클라이언트 내가 데이터를 조회하기 위해 MongoDB의 자바 클라이언트를 사용하고

<dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongodb-driver</artifactId> 
     <version>3.5.0</version> 
    </dependency> 

서버 버전은 3.4.10입니다. 그것이 작동하지 않는 자바 드라이버를 사용하는 경우

db.c1.find(
    { title: { $in: [/test/,/demo/] } }, 
    { title:1 } 
) 

을하지만 :

MongoDB의 쉘을 사용

, 나는 성공적으로 사용하여 조회 할 수 있습니다. 예 :

List<String> keywords = new ArrayList<>(); 
keywords.add("/test/"); 
keywords.add("/demo/"); 
Document titleRegEx = new Document("$in", keywords); 

Document filter = new Document("title", titleRegEx); 

Document firstDoc = coll.find(filter).first(); 

logger.info("firstDoc: {}", firstDoc); 

제발 도와주세요. 원하는 작업 ... MongoDB를 당신이 '문을 찾아'것을 볼 수 있습니다 호출

List<String> keywords = new ArrayList<>(); 
keywords.add("/test/"); 
keywords.add("/demo/"); 
Document titleRegEx = new Document("$in", keywords); 

Document filter = new Document("title", titleRegEx); 

Document firstDoc = coll.find(filter).first(); 

을 프로파일 링하는 경우

답변

0

은 ... 다음 필터가 MongoDB를 제출되도록 :

filter: { title: { $in: [ "/test/", "/demo/" ] } } } 

$in 문서의 값을 기록하십시오. $in: [/test/,/demo/] 대신 $in: [ "/test/", "/demo/" ]입니다. 따라서 정규식 대신 "/ test /"및 "/ demo /"에 정확한 문자열 일치를 수행합니다. 이것은 왜이 'find 문'이 아무 것도 반환하지 않는 이유를 설명합니다. 그래서 같은 자바 드라이버를 사용하는 경우

당신은 정규식 검색을 참여 :

Filters.regex("title", "test") 

당신이 문서를 검색하려면 그렇게 $in에 대한 Bson 인스턴스의 컬렉션을 제공하는 것을 허용하지 않습니다 MongoDB의 자바 드라이버하는 이 'in'목록에있는 요소 중 하나와 일치하는 경우 : /test/, /demo/OR 쿼리를 구성해야합니다. 예를 들어 :

find { find: "posts", filter: { $or: [ { title: /test/ }, { title: /demo/ } ] } } 

를이 기능이 동일한입니다 : 당신이 프로필 경우

Bson filter = Filters.or(Filters.regex("title", "test"), Filters.regex("title", "demo")); 

FindIterable<Document> documents = collection.find(filter); 

는 MongoDB를 사용하면 위의 코드가 MongoDB를에 실행되는 '문을 찾아'다음 원인 것을 볼 수 호출 질문에 보여준 명령에.

+0

도움을 주신 덕분에 제공된 코드가 유용합니다! – jiucai