Saya mencoba untuk melakukan permintaan regex menggunakan pymongo terhadap server mongodb. Struktur dokumen adalah sebagai berikut
{
"files": [
"File 1",
"File 2",
"File 3",
"File 4"
],
"rootFolder": "/Location/Of/Files"
}
Saya ingin mendapatkan semua file yang cocok dengan pola * File. Saya mencoba melakukan ini seperti itu
db.collectionName.find({'files':'/^File/'})
Namun saya tidak mendapatkan apa-apa kembali, apakah saya kehilangan sesuatu karena menurut mongodb docs ini harus mungkin. Jika saya melakukan kueri di konsol mongo itu berfungsi dengan baik, apakah ini berarti api tidak mendukungnya atau saya hanya menggunakannya dengan salah
^
) dapat menggunakan indeks di db, dan akan berjalan jauh lebih cepat dalam kasus itu.Ternyata pencarian regex dilakukan sedikit berbeda di pymongo tetapi sama mudahnya.
Regex dilakukan sebagai berikut:
Ini akan cocok dengan semua dokumen yang memiliki properti file yang memiliki item di dalamnya yang dimulai dengan File
sumber
$regex
. @ Jawaban Eric adalah cara python yang sedikit berbeda.$regex
mengambil$options
argumen.r'^File'
alih-alih'^File'
menghindari masalah lainUntuk menghindari kompilasi ganda Anda dapat menggunakan pembungkus bson regex yang disertakan dengan PyMongo:
Regex hanya menyimpan string tanpa mencoba mengompilasinya, jadi find_one kemudian dapat mendeteksi argumen sebagai tipe 'Regex' dan membentuk kueri Mongo yang sesuai.
Saya merasa cara ini sedikit lebih Pythonic daripada jawaban teratas lainnya, misalnya:
Ada baiknya membaca di dokumentasi bson Regex jika Anda berencana untuk menggunakan permintaan regex karena ada beberapa peringatan.
sumber
bson.regex.Regex
akan melakukan trik!Solusi
re
tidak menggunakan indeks sama sekali. Anda harus menggunakan perintah seperti:db.collectionname.find({'files':{'$regex':'^File'}})
(Saya tidak bisa berkomentar di bawah balasan mereka, jadi saya balas di sini)
sumber