MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

В MongoDB, как да се извърши заявка въз основа на това дали едно поле на низ съдържа друго

Можете да направите това с $where чрез създаване на RegExp за string1 и след това да го тествате спрямо string2 :

db.test.find({$where: 'RegExp(this.string1).test(this.string2)'})

Въпреки това, ако използвате MongoDB 3.4+, можете да направите това по-ефективно, като използвате $indexOfCP оператор за агрегиране:

db.test.aggregate([
    // Project  the index of where string1 appears in string2, along with the original doc.
    {$project: {foundIndex: {$indexOfCP: ['$string2', '$string1']}, doc: '$$ROOT'}},
    // Filter out the docs where the string wasn't found
    {$match: {foundIndex: {$ne: -1}}},
    // Promote the original doc back to the root
    {$replaceRoot: {newRoot: '$doc'}}
])

Или по-директно, като също използвате $redact :

db.test.aggregate([
    {$redact: {
        $cond: {
            if: { $eq: [{$indexOfCP: ['$string2', '$string1']}, -1]},
            then: '$$PRUNE',
            else: '$$KEEP'
        }
    }}
])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Експортиране на данни

  2. Как да добавите стойности към bson.D обект

  3. Схемата не е регистрирана за модел. Mongodb>Mongoose

  4. Как мога да тествам нова агрегираща рамка на Mongodb

  5. Случаи на използване за NoSQL