Pertanyaan Bagaimana cara mempertanyakan MongoDB dengan "like"?


Saya ingin menanyakan sesuatu sebagai SQL like pertanyaan:

select * 
from users 
where name like '%m%'

Bagaimana melakukan hal yang sama di MongoDB?
Saya tidak dapat menemukan operator untuk like dalam dokumentasi.


1061
2017-07-22 03:19


asal


Jawaban:


Itu harus:

db.users.find({"name": /.*m.*/})

atau, serupa:

db.users.find({"name": /m/})

Anda sedang mencari sesuatu yang mengandung "m" di suatu tempat (SQL's '%'Operator sama dengan RegExcx'.*'), bukan sesuatu yang "m" berlabuh ke awal string.


1431
2017-07-22 03:57



db.users.insert({name: 'paulo'})
db.users.insert({name: 'patric'})
db.users.insert({name: 'pedro'})

db.users.find({name: /a/})  //like '%a%'

keluar: paulo, patric

db.users.find({name: /^pa/}) //like 'pa%' 

keluar: paulo, patric

db.users.find({name: /ro$/}) //like '%ro'

keluar: pedro


238
2018-05-20 13:26



Di

  • PyMongo menggunakan Python
  • Luwak menggunakan Node.js 
  • Jongo, menggunakan Jawa
  • mgo, menggunakan Pergi

Anda dapat melakukan:

db.users.find({'name': {'$regex': 'sometext'}})

188
2017-10-07 17:07



Di PHP, Anda bisa menggunakan kode berikut:

$collection->find(array('name'=> array('$regex' => 'm'));

74
2018-05-13 08:36



Anda akan menggunakan regex untuk itu di mongo.

misalnya: db.users.find({"name": /^m/})


42
2017-07-22 03:48



Jika menggunakan node.js, saya t mengatakan bahwa Anda dapat menulis ini:

db.collection.find( { field: /acme.*corp/i } );
//or
db.collection.find( { field: { $regex: 'acme.*corp', $options: 'i' } } );

Juga, Anda dapat menulis ini:

db.collection.find( { field: new RegExp('acme.*corp', 'i') } );

24
2018-03-09 06:11



Sudah ada banyak jawaban. Saya memberikan berbagai jenis persyaratan dan solusi untuk pencarian string dengan regex.

Anda dapat melakukannya dengan regex yang berisi kata seperti. Anda juga bisa menggunakannya $options => i untuk pencarian tidak sensitif huruf

Mengandung string

db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})

Tidak Berisi string hanya dengan regex

db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})

Kasus yang tidak peka string

db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})

Dimulai dari string

db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})

Berakhir dengan string

db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})

Menjaga ini sebagai penanda, dan referensi untuk perubahan lain yang mungkin Anda butuhkan.


22
2017-08-11 15:39



Sudah Anda dapatkan jawabannya tetapi untuk mencocokkan regex dengan ketidaksensitifan huruf

Anda bisa menggunakan kueri berikut

db.users.find ({ "name" : /m/i } ).pretty()

Itu i dalam /m/i menunjukkan ketidaksensitifan dan .pretty() memberikan hasil yang lebih cantik


14
2017-11-21 05:39



Anda memiliki 2 pilihan:

db.users.find({"name": /string/})

atau

db.users.find({"name": {"$regex": "string", "$options": "i"}})

Yang kedua Anda memiliki lebih banyak opsi, seperti "i" dalam opsi untuk menemukan menggunakan case insensitive. Dan tentang "string", Anda dapat menggunakan seperti ".tali."(% string%), atau" string. * "(string%) dan". * string) (% string) misalnya. Anda dapat menggunakan ekspresi reguler sesuai keinginan Anda.

Nikmati!


13
2018-04-26 02:48



Untuk Mongoose di Node.js

db.users.find({'name': {'$regex': '.*sometext.*'}})

11
2017-11-10 11:39



Anda dapat menggunakan fitur baru 2,6 mongodb:

db.foo.insert({desc: "This is a string with text"});
db.foo.insert({desc:"This is a another string with Text"});
db.foo.ensureIndex({"desc":"text"});
db.foo.find({
    $text:{
        $search:"text"
    }
});

10
2017-08-04 19:19