필드에 문자열이 포함되어 있는지 확인
필드 값에 특정 문자열이 포함되어 있는지 확인할 수있는 연산자를 찾고 있습니다.
다음과 같은 것 :
db.users.findOne({$contains:{"username":"son"}})
가능합니까?
다음 코드를 사용하여 수행 할 수 있습니다.
db.users.findOne({"username" : {$regex : ".*son.*"}});
Mongo 쉘이 정규식을 지원하므로 완전히 가능합니다.
db.users.findOne({"username" : /.*son.*/});
쿼리에서 대소 문자를 구분하지 않으려면 아래에 표시된 것처럼 "i"옵션을 사용할 수 있습니다.
db.users.findOne({"username" : /.*son.*/i});
참조 : http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions
https://docs.mongodb.com/manual/reference/sql-comparison/
http://php.net/manual/en/mongo.sqltomongo.php
MySQL
SELECT * FROM users WHERE username LIKE "%Son%"
몽고 DB
db.users.find({username:/Son/})
버전 2.4부터는 필드에 텍스트 색인 을 작성 하여 $ text 연산자 를 검색하고 쿼리에 사용할 수 있습니다.
먼저 색인을 작성하십시오.
db.users.createIndex( { "username": "text" } )
그런 다음 검색하십시오.
db.users.find( { $text: { $search: "son" } } )
벤치 마크 (~ 150K 문서) :
- 정규식 (다른 답변) => 5.6-6.9 초
- 텍스트 검색 => .164-.201 초
노트:
- 컬렉션은 하나의 텍스트 인덱스 만 가질 수 있습니다. 검색 할 경우 와일드 카드 텍스트 인덱스를 사용할 수 있는 이 같은 문자열 필드 :
db.collection.createIndex( { "$**": "text" } )
. - 텍스트 인덱스는 클 수 있습니다. 여기에는 삽입 된 각 문서에 대한 각 색인 필드에 고유 한 사후 스테 밍 단어에 대한 하나의 색인 항목이 포함됩니다.
- 텍스트 인덱스는 일반 인덱스보다 빌드하는 데 시간이 더 걸립니다.
- 텍스트 색인은 문서에서 단어의 근접성에 대한 문구 나 정보를 저장하지 않습니다. 결과적으로 전체 컬렉션이 RAM에 들어가면 구문 쿼리가 훨씬 더 효과적으로 실행됩니다.
이것이 검색 엔진의 첫 번째 히트 중 하나이며 위의 어느 것도 MongoDB 3.x에서 작동하지 않는 것이므로 다음은 작동하는 정규식 검색입니다.
db.users.find( { 'name' : { '$regex' : yourvalue, '$options' : 'i' } } )
별도의 색인을 만들 필요가 없습니다.
Python을 통해 MongoDB를 연결하는 경우 수행해야 할 작업은 다음과 같습니다.
db.users.find({"username": {'$regex' : '.*' + 'Son' + '.*'}})
'Son'대신 변수 이름을 사용하여 문자열 연결을 사용할 수도 있습니다.
이 작업을 수행하는 가장 간단한 방법
쿼리를 대소 문자를 구분하려면
db.getCollection("users").find({'username':/Son/})
쿼리를 대소 문자를 구분하지 않으려면
db.getCollection("users").find({'username':/Son/i})
RegExp 일치에서 HTML 태그를 무시하는 방법 :
var text = '<p>The <b>tiger</b> (<i>Panthera tigris</i>) is the largest <a href="/wiki/Felidae" title="Felidae">cat</a> <a href="/wiki/Species" title="Species">species</a>, most recognizable for its pattern of dark vertical stripes on reddish-orange fur with a lighter underside. The species is classified in the genus <i><a href="/wiki/Panthera" title="Panthera">Panthera</a></i> with the <a href="/wiki/Lion" title="Lion">lion</a>, <a href="/wiki/Leopard" title="Leopard">leopard</a>, <a href="/wiki/Jaguar" title="Jaguar">jaguar</a>, and <a href="/wiki/Snow_leopard" title="Snow leopard">snow leopard</a>. It is an <a href="/wiki/Apex_predator" title="Apex predator">apex predator</a>, primarily preying on <a href="/wiki/Ungulate" title="Ungulate">ungulates</a> such as <a href="/wiki/Deer" title="Deer">deer</a> and <a href="/wiki/Bovid" class="mw-redirect" title="Bovid">bovids</a>.</p>';
var searchString = 'largest cat species';
var rx = '';
searchString.split(' ').forEach(e => {
rx += '('+e+')((?:\\s*(?:<\/?\\w[^<>]*>)?\\s*)*)';
});
rx = new RegExp(rx, 'igm');
console.log(text.match(rx));
이것은 아마도 MongoDB 집계 필터로 전환하기가 매우 쉽습니다.
대소 문자를 구분하지 않는 이상적인 인덱스 i 옵션 사용
db.users.findOne({"username" : new RegExp(search_value, 'i') });
참고 URL : https://stackoverflow.com/questions/10610131/checking-if-a-field-contains-a-string
'Programming' 카테고리의 다른 글
PHP에서 주어진 키의 값으로 연관 배열의 배열을 정렬하는 방법은 무엇입니까? (0) | 2020.02.22 |
---|---|
PostgreSQL에서 제목이있는 테이블을 CSV로 내보내는 방법은 무엇입니까? (0) | 2020.02.22 |
순차적으로 Gulp 작업을 순차적으로 실행하는 방법 (0) | 2020.02.22 |
Android ListView 구분선의 색상을 변경하는 방법은 무엇입니까? (0) | 2020.02.22 |
Git이 Subversion보다 나은 이유는 무엇입니까? (0) | 2020.02.22 |