mongodb를 java api를 사용하여 "like"로 쿼리하는 방법은 무엇입니까?



Answers

먼저 텍스트를 인용 한 다음 컴파일을 사용하여 정규식을 가져와야합니다.

q.put("name",  Pattern.compile(Pattern.quote(m)));

java.util.Pattern.quote() 사용하지 않으면 일부 문자가 이스케이프되지 않습니다.

예를 들면 ? m 매개 변수가 예외를 throw하기 때문입니다.

Question

이 질문은 다른 post 과 매우 유사합니다.

기본적으로 mongodb 버전의 SQL "like" '% m %'연산자를 사용하고 싶습니다.

하지만 내 상황에서 다른 게시물은 mongodb 셸을 사용하는 동안 mongodb에 대한 자바 API를 사용하고 있습니다

나는 다른 스레드에 게시 된 것을 시도하고 괜찮 았는데

db.users.find({"name": /m/})

하지만 자바에서는, 나는 BasicDBObject에 put 메소드를 사용하고 그것을 DBCollections 객체의 find () 메소드에 전달하고있다.

BasicDBObject q = new BasicDBOBject();
q.put("name", "/"+m+"/");
dbc.find(q);

하지만 이것은 작동하지 않는 것 같습니다.

누구든지 아이디어가 있습니까?




스프링 데이터 mongodb에서는 다음과 같이 할 수 있습니다.

Query query = new Query();
query.limit(10);        
query.addCriteria(Criteria.where("tagName").regex(tagName));
mongoOperation.find(query, Tags.class);



실제 답변이 아닐 수도 있습니다 (터미널 쿼리를 직접 실행).

public void displayDetails() {
    try {
        // DB db = roleDao.returnDB();
        MongoClient mongoClient = new MongoClient("localhost", 5000);
        DB db = mongoClient.getDB("test");
        db.eval("db.test.update({'id':{'$not':{'$in':[/su/]}}},{$set:{'test':'test3'}},true,true)", new Object[] {});
        System.out.println("inserted  ");

    } catch (Exception e) {
        System.out.println(e);
    }
}



Links