Mongodb의 들판에서 서브스트링을 찾는 방법
오브젝트 필드에 서브스트링이 포함되어 있는 데이터베이스 내의 모든 오브젝트를 찾으려면 어떻게 해야 합니까?
문자열 값을 가진 컬렉션 개체의 필드가 A인 경우:
A에 "abc def"라는 하위 문자열이 포함된 db "데이터베이스" 내의 모든 개체를 찾습니다.
나는 시도했다.
db.database.find({A: {$regex: '/^*(abc def)*$/''}})
그러나 작동하지 않았다.
갱신하다
실제 문자열(Unicode):
Sujet Commentaire sur Star Wars Episode III - La Revanche des Sith 1
스타워즈에서 모든 엔트리를 검색해야 합니다.
db.test.find({A: {$regex: '^*(star wars)*$''}}) not wokring
이것 대신:
db.database.find({A: {$regex: '/^*(abc def)*$/''}})
다음 작업을 수행해야 합니다.
db.database.find({A: /abc def/i })
^*는 ^과 $는 앵커이며 반복 가능한 구문이 아니기 때문에 실제로는 유효하지 않습니다.아마 여기서 ^.*를 의미했을 겁니다.단, ^.*는 단순히 "Everything to the character following"을 의미하며 (abc def)*는 "0회 이상 "abc def"를 의미하지만 $이기 때문에 문자열 끝에 있어야 합니다.마지막에 있는 "i"는 대소문자를 둔감하게 만드는 것입니다.
'스타워즈'라는 문자열만 쓰면 나머지는 다 할 수 있어
db.test.find({A: {$regex: 'Star Wars'}})
$regex
너무 비싸거나 많은 컬렉션이 느립니다.
집약 프레임워크와 $indexOfCP를 활용하는 것이 좋습니다.
db.test.aggregate([{$match:
{$expr: { $gt: [{ $indexOfCP: [ "$A", "Star Wars" ] }, -1]}}
}, {$project: {A:1}}])
대소문자를 구분하지 않는 검색을 위해$toUpper
를 찾아 헤매다STAR WARS
.
이 방법은 효과가 있었습니다.
db.test.find({"A": {'$regex': '.*star wars.*'}})
이것은 집약 구문을 사용합니다.
db.movies.aggregate([
{$match:
{
title: {$regex: 'Star'}
}
}
] )
// executes, name LIKE john and only selecting the "name" and "friends" fields
db.collection.find({ name: /john/i }, 'name friends').exec();
// passing options
db.collection.find({ name: /john/i }, null, { skip: 10 }).exec();
db.getCollection('your_collection_name').find({key:{$regex: "value"}})
/* 예:- your_collection_name: 사용자(예: 사용자), 키: 이메일, 값: @collectio.com,
쿼리는 db.getCollection('users').find({email:{$regex: "@regex.com"}})
그러면 모든 사용자가 contain@gmail.com에서 이메일 */을 받을 수 있습니다.
언급URL : https://stackoverflow.com/questions/10242501/how-to-find-a-substring-in-a-field-in-mongodb
'programing' 카테고리의 다른 글
재료 UI에서 자동 완성 구성요소에 대한 변경 처리 (0) | 2023.02.20 |
---|---|
워드프레스:카테고리 및 태그가 존재하지 않는 경우 자동으로 삽입하시겠습니까? (0) | 2023.02.20 |
컨트롤러 간에 데이터를 전달하다 (0) | 2023.02.20 |
WordPress에서 영감을 얻은 Larabel PHP에서 미디어 라이브러리 만들기 (0) | 2023.02.20 |
효소에서는 어댑터가 구성되어야 합니다. (0) | 2023.02.20 |