복붙노트

[MONGODB] 나는 MongoDB에 대한 쿼리에 정규식 변수를 사용하는 방법

MONGODB

나는 MongoDB에 대한 쿼리에 정규식 변수를 사용하는 방법

나는 contruct하는 정규식 표현을 기반으로 문서를 쿼리하여 MongoDB를하고 싶습니다. 에 대한 예 : 그에서 Nodejs에 대한 임의의 문자와 임의의 숫자의 조합으로 다음과 같이 나는 간단한 정규식을 구축 한

var randnum = Math.floor((Math.random() * 10) + 1);
var alpha = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','X','Y','Z'];
var randletter = alpha[Math.floor(Math.random() * alpha.length)];
var val = randletter + randnum + '.*;

내가 좋아하는 정규식 변수에 대한 다양한 조합을 시도했다

var stream = collection.find({"FirstName": /val/).stream();
&&
var stream = collection.find({"FirstName": /$val/).stream();
&&
var stream = collection.find({"FirstName": {$in : [{$regex:val}]}}).stream()
&&
var stream = collection.find({"FirstName": {$in : [{$regex:$val}]}}).stream()

그것은 오 아무도 제대로 작동하지 않습니다. 내가 실제 정규 표현식을 쓸 때 그러나 나는 예에 대한 기록을 얻을

var stream = collection.find({"FirstName": /J.*/).stream();

어떤 도움을 이해할 수있을 것이다.

감사 가네

해결법

  1. ==============================

    1.당신은 /.../ 구문은 리터럴에 사용 그대로 정규식 생성자를 사용하여 문자열에서 정규 표현식 객체를 생성해야합니다.

    당신은 /.../ 구문은 리터럴에 사용 그대로 정규식 생성자를 사용하여 문자열에서 정규 표현식 객체를 생성해야합니다.

    var stream = collection.find({"FirstName": new RegExp(val)}).stream();
    
  2. ==============================

    2., 나는 나의 제목과 같은 문제가되고 검색을 많이 후, 나는 다음은이 대답을 발견

    , 나는 나의 제목과 같은 문제가되고 검색을 많이 후, 나는 다음은이 대답을 발견

    var search = 'Joe';
    db.users.find(name: /^search/)
    db.users.find(name: {$regex: /^search/});
    db.users.find(name: {$regex: "/^" + search + "/"});
    

    쿼리는 위의 아무것도 반환하지 않습니다. 이 작은 문제의 해결책은 아주 간단합니다 :

    db.users.find(name: new RegExp(search)) //For substring search, case sensitive. 
    db.users.find(name: new RegExp('^' + search + '$')) //For exact search, case sensitive
    db.users.find(name: new RegExp(search, ‘i')) //For substring search, case insensitive
    db.users.find(name: new RegExp('^' +search + '$', 'i')); //For exact search, case insensitive
    

    다른 플래그 또는 속성은 여기 참조에 기반을 추가 할 수 있습니다

  3. ==============================

    3.또는 작업 정규식에 동적 값을 사용하려면 다음 코드를 사용하여

    또는 작업 정규식에 동적 값을 사용하려면 다음 코드를 사용하여

    {$match: { $or: [{ 'title': { $regex:  request.query.val, $options: 'i'} }, { 'skills_required': { $regex:  request.query.val, $options: 'i'} }] }},
    
  4. ==============================

    4.쿼리 부분의 매개 변수로 변수의 발을 사용하려는 경우, 예를 들어 $ 정규식을 사용할 수 있습니다 :

    쿼리 부분의 매개 변수로 변수의 발을 사용하려는 경우, 예를 들어 $ 정규식을 사용할 수 있습니다 :

    collection.find({"FirstName": {$regex:val}})
    

    설명서에 따라 운영자에 $에서 $ 정규식을 넣을 수 없습니다.

    당신이 운영자에 $에서 정규 표현식 객체를 넣어하려는 경우, 당신은 예를 들어, 자바 스크립트 정규 표현식 객체를 사용해야합니다 :

    collection.find({"FirstName": {$in: [/abc/, /123/]}})
    

    그런데, 발에 / 발 / 상수 문자열이 아닌 변수 위에서 정의 된 바와 같다.

  5. from https://stackoverflow.com/questions/26699885/how-can-i-use-a-regex-variable-in-a-query-for-mongodb by cc-by-sa and MIT license