Saya menggunakan node js, luwak, express dan mongodb.

Saya telah membuat formulir sederhana, di mana Anda memasukkan nama lengkap Anda dan mencari di database dan mengembalikan detail Anda yang lain.

Apakah mungkin untuk mencari hanya menggunakan beberapa kata dari seluruh nama? misalnya jika pengguna ingin mencari "abc xyz", dapatkah pengguna melakukan hal yang sama hanya menggunakan "abc" atau "xyz"

Ini adalah rute asli saya:

app.get("/",function(req,res){

  var name = req.query.name;
  details.findOne({fullname:name},function(err,foundAsked){
      if(err){console.log("ERROR!!!");}
      else{res.render("Details.ejs",{foundAsked:foundAsked,name:name}); }
  });
 }); 

Apakah mungkin untuk melakukan itu? jika ya, bagaimana saya bisa menerapkannya?

1
Ravi Hooda 18 Agustus 2017, 15:50

2 jawaban

Jawaban Terbaik

Anda dapat menggunakan regex untuk mencocokkan sebagian pada bidang tertentu seperti itu

const query = {
    fullname: {
        $regex: req.query.name,
        $options: 'i'
    }
};

details.find(query, function(err, foundAsked){
  ...
})

Di mana i dalam kueri adalah membuatnya tidak peka huruf besar-kecil.

Dalam kasus menggunakan pencarian parsial, saya akan merekomendasikan untuk tidak menggunakan findOne karena dapat menyesatkan pengguna untuk hanya mengembalikan satu hasil jika dia mengetik, katakanlah A

1
wjvander 18 Agustus 2017, 13:03

Ya, Anda dapat menggunakan regex untuk itu:

details.findOne({ fullname : /.*(?:abc|xyz).*/gi }, .....
1
Jeremy Thille 18 Agustus 2017, 12:57