programing

Mongodb의 들판에서 서브스트링을 찾는 방법

i4 2023. 2. 20. 23:56
반응형

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

반응형