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) {
}
)