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

Truy vấn MongoDB $ in với mảng phần tử regex

Sử dụng $in có thể khá hiệu quả với các mảng nhỏ nhưng không tốt với các danh sách lớn vì nó sẽ bỏ qua trong chỉ mục để tìm các tài liệu phù hợp hoặc xem qua toàn bộ bộ sưu tập nếu không có chỉ mục để sử dụng.

Bên cạnh việc sử dụng $ in với biểu thức chính quy, bạn có thể sử dụng mẫu regex được phân tách bằng dấu sổ đứng với danh sách từ khóa như sau:

Tài liệu kiểm tra:

db.papertest.insert([
    { category: "ad bd cd" },
    { category: "dd ed fd" },
    { category: "gd hd id" },
    { category: "jd kd ld" },
    { category: "md nd od" },
    { category: "pd qd rd" },
    { category: "sd td ud" },
    { category: "vd wd xd yd zd" },
]);

Điều kỳ diệu:

var keywords = ["xd", "sd", "ad"],
    regex = keywords.join("|");

db.papertest.find({
    "category": {
        "$regex": regex, 
        "$options": "i"
    } 
});

Kết quả

{ "_id" : ObjectId("56bb6f171bb4f693057c0ba4"), "category" : "ad bd cd" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0baa"), "category" : "sd td ud" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0bab"), "category" : "vd wd xd yd zd" }


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tại sao bạn vẫn nên sử dụng Công cụ lưu trữ MMAPv1 cho MongoDB

  2. Giới thiệu về kiểu dữ liệu MongoDB

  3. Dữ liệu Spring và mongodb - khôi phục đơn giản với Spring trong @Transactional

  4. mongoose:tìm dữ liệu bằng cách lặp lại trên một mảng mô hình

  5. Không thể kết nối với MongoDB Atlas (queryTxt ETIMEOUT)