Để tìm kiếm văn bản trên nhiều trường cùng lúc, sử dụng Text Index kết hợp toán tử $text và $search.
Ví dụ: Collection searchMultipleFieldsDemo:
> db.searchMultipleFieldsDemo.insertOne({"_id":100,"FirstSubject":"Java","SecondSubject":"MongoDB"});
>> db.searchMultipleFieldsDemo.insertOne({"_id":101,"FirstSubject":"MongoDB","SecondSubject":"MySQL"});
> db.searchMultipleFieldsDemo.insertOne({"_id":102,"FirstSubject":"MySQL","SecondSubject":"Java"});
Tạo text index trên các trường cần tìm kiếm:
> db.searchMultipleFieldsDemo.createIndex({ "FirstSubject": "text", "SecondSubject": "text" });
Tìm kiếm từ khóa "Java MongoDB":
> db.searchMultipleFieldsDemo.find({ $text: { $search: "Java MongoDB" } });
Kết quả trả về 3 tài liệu (được sắp xếp theo điểm text score):
{ "_id" : 102, "FirstSubject" : "MySQL", "SecondSubject" : "Java" }
{ "_id" : 100, "FirstSubject" : "Java", "SecondSubject" : "MongoDB" }
{ "_id" : 101, "FirstSubject" : "MongoDB", "SecondSubject" : "MySQL" }
Lưu ý:
- Cần tạo text index trước khi dùng
$text. - Mỗi collection chỉ được có một text index (có thể bao gồm nhiều trường).
- Kết quả mặc định sắp xếp theo
textScoregiảm dần.