Bạn cần bao bọc các phần tử trong mảng bằng RegExp
đối tượng tức là
regex =[new RegExp ("sai", "i"), mới RegExp ("test", "i"), ...]
Bạn có thể sử dụng mã <> map ()
phương pháp ánh xạ các phần tử trong mảng bằng trình bao bọc RegExp thành một mảng mới mà sau đó bạn có thể sử dụng trong truy vấn regex với $in
:
var x = ["sai","test","jacob","justin"],
regex = x.map(function (e) { return new RegExp(e, "i"); });
db.users.find({"profile.firstName": { "$in": 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 đó 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:
var x = ["sai","test","jacob","justin"],
regex = x.join("|");
db.users.find({
"profile.firstName": {
"$regex": regex,
"$options": "i"
}
}).count;