Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Kiểm tra giá trị có trong mảng trong MongoDB

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ảng UserMessage chứ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});