MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Di MongoDB, cara melakukan kueri berdasarkan jika satu bidang string berisi yang lain

Anda dapat melakukannya dengan $where dengan membuat RegExp untuk string1 dan kemudian mengujinya terhadap string2 :

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

Namun, jika Anda menggunakan MongoDB 3.4+, Anda dapat melakukannya dengan lebih efisien dengan menggunakan $indexOfCP operator agregasi:

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'}}
])

Atau lebih langsung dengan menggunakan $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 - Indeks tidak digunakan saat menyortir dan membatasi kueri jarak jauh

  2. Luwak Mencoba membuka koneksi yang tidak tertutup

  3. Template Render tidak meneruskan variabel agregat pymongo ke template

  4. Baca file BSON dengan Python?

  5. Memanggil fungsi server js di mongodb dari java