Saat Anda melakukan pencarian teks, ini memiliki banyak langkah internal seperti menandai pekerjaan Anda, menganalisis batang kata terendah (mis. g. untuk mencocokkan memasak & memasak karena keduanya berasal dari pekerjaan dasar "memasak"). Jika Anda mengharapkan pencocokan persis, Anda sebenarnya tidak mencari pencarian tekstual tetapi Anda mencari kueri normal
Karena itu,
Jika kamu melakukan ini
db.City.find({$text:{$search: "Fort Minor"}})Ini akan mencoba menemukan semua dokumen yang memiliki benteng, minor, minoritas, forting dll di dalamnya
Jika Anda melakukannya di bawah ini
db.City.find({ name : "Fort Minor"}) _Jika akan memberi Anda dokumen dengan pencocokan persis
Namun, inilah tangkapannya
JIKA Anda mencari semua huruf kecil seperti
db.City.find({ name : "fort minor"})Itu tidak akan memberi Anda apa yang Anda harapkan
Untuk mengatasinya, gunakan ekspresi reguler
db.user.find( { name: /^Fort Minor$/i } );Baca selengkapnya
skor. 0
Jika kamu melakukan ini
query = {"$search" :"(\"{}\"".format(val1)} city = db.City.find({"$text": query}) _skor. 2
Jawaban di atas sebenarnya tidak membantu. Saya juga menemukan masalah yang sama, saya menemukan solusi dengan template literal baru dari Javascript. inilah solusinya
Saat Anda melakukan pencarian teks, ini memiliki banyak langkah internal seperti menandai pekerjaan Anda, menganalisis batang kata terendah (mis. g. untuk mencocokkan memasak & memasak karena keduanya berasal dari pekerjaan dasar "memasak"). Jika Anda mengharapkan pencocokan persis, Anda sebenarnya tidak mencari pencarian tekstual tetapi Anda mencari kueri normal
Karena itu,
Jika kamu melakukan ini
db.City.find({$text:{$search: "Fort Minor"}})Ini akan mencoba menemukan semua dokumen yang memiliki benteng, minor, minoritas, forting dll di dalamnya
Jika Anda melakukannya di bawah ini
db.City.find({ name : "Fort Minor"}) _Jika akan memberi Anda dokumen dengan pencocokan persis
Namun, inilah tangkapannya
JIKA Anda mencari semua huruf kecil seperti
db.City.find({ name : "fort minor"})Itu tidak akan memberi Anda apa yang Anda harapkan
Untuk mengatasinya, gunakan ekspresi reguler
Solusi Terkait
Mongodb – Perbarui bidang MongoDB menggunakan nilai bidang lain
Cara terbaik untuk melakukannya adalah di versi 4. 2+ yang memungkinkan penggunaan pipa agregasi dalam dokumen pembaruan dan, atau metode pengumpulan. Perhatikan bahwa yang terakhir telah ditinggalkan di sebagian besar jika tidak semua driver bahasa
###MongoDB 4. 2+
Versi 4. 2 juga memperkenalkan operator tahap pipa db.City.find({$text:{$search: val1}}) _6 yang merupakan alias untuk db.City.find({$text:{$search: val1}}) 7. Saya akan menggunakan db.City.find({$text:{$search: val1}}) _6 di sini karena ini memetakan dengan apa yang ingin kita capai
db.collection.<update method>( {}, [ {"$set": {"name": { "$concat": ["$firstName", " ", "$lastName"]}}} ] )Perhatikan bahwa tanda kurung siku di argumen kedua untuk metode yang menentukan saluran agregasi alih-alih dokumen pembaruan biasa. Menggunakan dokumen biasa tidak akan berfungsi dengan benar
###MongoDB 3. 4+
Dalam 3. 4+ Anda dapat menggunakan db.City.find({$text:{$search: val1}}) _7 dan operator pipa agregasi db.City.find({$text:{$search: "Fort Minor"}}) 0
db.collection.aggregate( [ { "$addFields": { "name": { "$concat": [ "$firstName", " ", "$lastName" ] } }}, { "$out": "collection" } ] )Perhatikan bahwa ini tidak memperbarui koleksi Anda melainkan mengganti koleksi yang ada atau membuat yang baru. Juga untuk operasi pembaruan yang memerlukan "pengecoran tipe", Anda akan memerlukan pemrosesan sisi klien, dan bergantung pada operasinya, Anda mungkin perlu menggunakan metode db.City.find({$text:{$search: "Fort Minor"}}) 1 alih-alih metode db.City.find({$text:{$search: "Fort Minor"}}) 2
##MongoDB 3. 2 dan 3. 0 Cara kami melakukannya adalah dengan db.City.find({$text:{$search: "Fort Minor"}}) _3ing dokumen kami dan menggunakan operator agregasi string db.City.find({$text:{$search: "Fort Minor"}}) 4 untuk mengembalikan string gabungan. kami Dari sana, Anda kemudian mengulangi kursor dan menggunakan operator pembaruan db.City.find({$text:{$search: val1}}) 6 untuk menambahkan bidang baru ke dokumen Anda menggunakan operasi massal untuk efisiensi maksimum
###Kueri agregasi
###MongoDB 3. 2 atau lebih baru
dari sini, Anda perlu menggunakan metode db.City.find({$text:{$search: "Fort Minor"}}) 6
var requests = []; cursor.forEach(document => { requests.push( { 'updateOne': { 'filter': { '_id': document._id }, 'update': { '$set': { 'name': document.name } } } }); if (requests.length === 500) { //Execute per 500 operations and re-init db.collection.bulkWrite(requests); requests = []; } }); if(requests.length > 0) { db.collection.bulkWrite(requests); }###MongoDB 2. 6 dan 3. 0
Dari versi ini Anda perlu menggunakan API yang sekarang sudah tidak digunakan lagi dan metode terkaitnya
db.City.find({$text:{$search: val1}}) _0###MongoDB 2. 4
db.City.find({$text:{$search: val1}}) _1Pencocokan tepat pencarian elastis
Bidang dianalisis dengan penganalisis standar secara default. Jika Anda ingin memeriksa kecocokan yang tepat, Anda dapat menyimpan bidang Anda yang tidak dianalisis juga, mis. g
db.City.find({$text:{$search: val1}}) _2Kemudian Anda dapat menanyakan bidang anjing untuk pencocokan persis, dan anjing. tokenized untuk menganalisis kueri (seperti teks lengkap)