MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Mongoose:truy vấn tên đầy đủ với regex

Tách cụm từ tìm kiếm theo các từ và tách chúng bằng toán tử thay thế ('|').

var terms = req.params.search.split(' ');

var regexString = "";

for (var i = 0; i < terms.length; i++)
{
    regexString += terms[i];
    if (i < terms.length - 1) regexString += '|';
}

var re = new RegExp(regexString, 'ig');

Đối với đầu vào 'John Smith' , điều này sẽ tạo ra một regex trông giống như /John|Smith/ig . Điều này sẽ trả về true cho các từ riêng lẻ cũng như hoạt động khi đầu vào chỉ là 'John Sm'

Bạn có thể chơi xung quanh với regex này để có được một regex khác phù hợp với nhu cầu của bạn.

CHỈNH SỬA:

Vấn đề ở đây là các trường tên của bạn tách biệt nhau. Trong trường hợp này, việc áp dụng cùng một regex cho cả hai trường sẽ không mang lại kết quả như bạn muốn. Regex cần được áp dụng cho cùng một trường với tên đầy đủ.

Một giải pháp khả thi là sử dụng tổng hợp:

User.aggregate()
    .project({fullName: {$concat: ['$firstName', ' ', '$lastName']}})
    .match({fullName: re})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Toán tử truy vấn MongoDB $ bỏ qua chỉ mục?

  2. Lỗi chỉ mục văn bản MongoDB:không hỗ trợ ghi đè ngôn ngữ

  3. Tài liệu về các lời hứa của Mongoose cho biết các truy vấn không phải là lời hứa?

  4. Django + Heroku + MongoDB Atlas (Djongo) =DatabaseError không có ngoại lệ

  5. Chủ đề MongoDB có an toàn không?