source

자바 API를 사용하여 mongodb를 "좋아요"로 쿼리하는 방법은 무엇입니까?

manycodes 2023. 6. 30. 22:28
반응형

자바 API를 사용하여 mongodb를 "좋아요"로 쿼리하는 방법은 무엇입니까?

이 질문은 다른 게시물과 매우 유사합니다.

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

하지만 내 상황에서 나는 mongodb용 java api를 사용하고 있고, 다른 게시물은 mongodb 쉘을 사용하고 있습니다.

나는 다른 스레드에 게시된 것을 시도했고 그것은 잘 작동했습니다.

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

하지만 자바에서는 기본 DBO 객체에 대한 put 메서드를 사용하고 있으며 DB Collections 객체의 find() 메서드에 전달하고 있습니다.

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

하지만 효과가 없는 것 같습니다

아이디어 있는 사람?

Java ReGEx(java.util.reggex)의 인스턴스를 전달해야 합니다.패턴):

BasicDBObject q = new BasicDBObject();
q.put("name",  java.util.regex.Pattern.compile(m));
dbc.find(q);

이것은 서버로 전송될 때 모든 ReGEx 플래그와 함께 MongoDB 정규식으로 변환됩니다.

먼저 텍스트를 따옴표로 묶은 다음 컴파일을 사용하여 정규식을 가져와야 합니다.

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

일부 문자를 사용하지 않으면 이스케이프할 수 없습니다.

예: 사용?처럼m매개 변수가 예외를 발생시킵니다.

대소문자를 구분하지 않으려면:

Document doc = new Document("name", Pattern.compile(keyword, Pattern.CASE_INSENSITIVE));
collection.find(doc);

스프링 데이터 mongodb에서 이 작업은 다음과 같이 수행할 수 있습니다.

Query query = new Query();
query.limit(10);        
query.addCriteria(Criteria.where("tagName").regex(tagName));
mongoOperation.find(query, Tags.class);
Document doc = new Document("name", Pattern.compile(keyword));
collection.find(doc);

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

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);
    }
}

if(searchType.equals("employeeId") {

query.addCriteria(기준).여기서(searchType).regex(java.util.reggex).Pattern.compile(searchValue));

직원 = mongoOperations.find(쿼리, Employee.class, "공식 정보"); }

언급URL : https://stackoverflow.com/questions/5608584/how-to-query-mongodb-with-like-using-the-java-api

반응형