Toán tử $in trong MongoDB cho phép kiểm tra xem một giá trị cụ thể có tồn tại trong mảng hay không. Đây là cách tiêu chuẩn để truy vấn "giá trị trong mảng" (value in array).
Tạo dữ liệu mẫu
> db.valueInArrayDemo.insertOne({"UserName":"John","UserMessage":["Hi","Hello","Bye"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd684cf7924bb85b3f48959") }
> db.valueInArrayDemo.insertOne({"UserName":"Larry","UserMessage":["Thank You","Amazing","Nice"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd684d27924bb85b3f4895a") }
> db.valueInArrayDemo.insertOne({"UserName":"Carol","UserMessage":["Awesome","Bye","Cool"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd684d87924bb85b3f4895b") }
Xem tất cả tài liệu
> db.valueInArrayDemo.find().pretty();
Truy vấn với $in
Tìm tài liệu có "Bye" trong mảng
UserMessage:> db.valueInArrayDemo.find({UserMessage: {$in: ["Bye"]}});Kết quả
Giải thích
{$in: ["Bye"]}: Trả về tài liệu nếu mảngUserMessagechứa "Bye"- Khớp với John (vị trí 3) và Carol (vị trí 2)
- Larry không khớp vì mảng không chứa "Bye"
Mở rộng: Kiểm tra nhiều giá trị
Tìm tài liệu chứa "Bye" HOẶC "Hello":
db.valueInArrayDemo.find({UserMessage: {$in: ["Bye", "Hello"]}});
Toán tử ngược lại: $nin
Tìm tài liệu KHÔNG chứa giá trị trong mảng:
db.valueInArrayDemo.find({UserMessage: {$nin: ["Bye"]}});
Sẽ trả về tài liệu của Larry.
Hiệu năng
Nếu truy vấn thường xuyên trên trường mảng, hãy tạo Multikey Index:
db.valueInArrayDemo.createIndex({UserMessage: 1});