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

Bagaimana cara mendapatkan semua nilai yang berisi bagian dari string menggunakan pencarian luwak?

Anda hampir menjawab ini sendiri di tag Anda. MongoDB memiliki $regex operator yang memungkinkan ekspresi reguler untuk dikirimkan sebagai kueri. Jadi Anda meminta string yang berisi "Alex", Anda melakukan ini:

Books.find(
    { "authors": { "$regex": "Alex", "$options": "i" } },
    function(err,docs) { 
    } 
);

Anda juga dapat melakukan ini:

Books.find(
    { "authors": /Alex/i }, 
    function(err,docs) { 

    }
);

Keduanya valid dan berbeda dengan cara Anda mencoba sintaks yang didukung dengan benar seperti yang ditunjukkan dalam dokumentasi.

Tetapi tentu saja jika Anda benar-benar bertanya "bagaimana cara mendapatkan hasil 'array' hanya untuk yang cocok dengan 'Alex' di suatu tempat di string?" maka ini sedikit berbeda.

Pencocokan kompleks untuk lebih dari satu elemen array adalah domain dari kerangka kerja agregasi ( atau mungkin mapReduce, tapi itu jauh lebih lambat ), di mana Anda perlu "memfilter" konten array.

Anda mulai dari banyak hal yang sama. Kuncinya di sini adalah $unwind untuk "menormalkan" konten array agar dapat "menyaring" dengan benar sebagai dokumen individual. Kemudian buat ulang array dengan dokumen yang "cocok".

Books.aggregate(
    [
        // Match first to reduce documents to those where the array contains the match
        { "$match": {
            "authors": { "$regex": "Alex", "$options": i }
        }},

        // Unwind to "de-normalize" the document per array element
        { "$unwind": "$authors" },

        // Now filter those document for the elements that match
        { "$match": {
            "authors": { "$regex": "Alex", "$options": i }
        }},

        // Group back as an array with only the matching elements
        { "$group": {
            "_id": "$_id",
            "title": { "$first": "$title" },
            "authors": { "$push": "$authors" },
            "subjects": { "$first": "$subjects" }
        }}
    ],
    function(err,results) {

    }
)


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Luwak menghapus (menarik) dokumen dalam array, tidak berfungsi dengan ObjectID

  2. MongoDB $indexOfCP

  3. Bagaimana cara menjalankan kueri asli MongoDB (JSON) hanya menggunakan driver mongo-java?

  4. gagal dengan kesalahan 10068:operator tidak valid:$oid

  5. MongoDB - Perbedaan antara indeks pada bidang teks dan indeks teks?