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

Truy vấn phần tử mảng (array) trong MongoDB

MongoDB hỗ trợ truy vấn trực tiếp vào các phần tử bên trong mảng một cách tự nhiên và mạnh mẽ. Bạn không cần $elemMatch cho các điều kiện đơn giản.

Cú pháp cơ bản

db.collection.find({ "trườngMảng": "giáTrịCầnTìm" }).pretty();

Truy vấn này trả về tất cả document mà mảng trườngMảng chứa giáTrịCầnTìm.

Ví dụ minh họa

Tạo collection queryArrayElementsDemo với mảng StudentFavouriteSubject:

> db.queryArrayElementsDemo.insertOne({ "StudentName": "John", "StudentFavouriteSubject": ["C", "Java"] });
> db.queryArrayElementsDemo.insertOne({ "StudentName": "Carol", "StudentFavouriteSubject": ["C", "C++"] });
> db.queryArrayElementsDemo.insertOne({ "StudentName": "David", "StudentFavouriteSubject": ["MongoDB", "Java"] });

Hiển thị tất cả:

> db.queryArrayElementsDemo.find().pretty();

Kết quả:

{ "_id" : ..., "StudentName" : "John", "StudentFavouriteSubject" : [ "C", "Java" ] }
{ "_id" : ..., "StudentName" : "Carol", "StudentFavouriteSubject" : [ "C", "C++" ] }
{ "_id" : ..., "StudentName" : "David", "StudentFavouriteSubject" : [ "MongoDB", "Java" ] }

Truy vấn sinh viên thích môn "Java"

> db.queryArrayElementsDemo.find({ "StudentFavouriteSubject": "Java" }).pretty();

Kết quả:

{ "_id" : ..., "StudentName" : "John", "StudentFavouriteSubject" : [ "C", "Java" ] }
{ "_id" : ..., "StudentName" : "David", "StudentFavouriteSubject" : [ "MongoDB", "Java" ] }

Các toán tử nâng cao cho mảng

Toán tửMô tảVí dụ
$allMảng chứa TẤT CẢ các giá trị chỉ định{ tags: { $all: ["nodejs", "mongodb"] } }
$sizeMảng có độ dài chính xác{ tags: { $size: 3 } }
$elemMatchKhớp nhiều điều kiện trên CÙNG MỘT phần tử (dùng cho mảng object){ items: { $elemMatch: { price: { $gt: 10 }, qty: { $lt: 5 } } } }
$inMảng chứa ÍT NHẤT MỘT giá trị trong danh sách{ tags: { $in: ["java", "python"] } }
$ninMảng KHÔNG chứa giá trị nào trong danh sách{ tags: { $nin: ["deprecated"] } }

Mẹo: Tạo index trên trường mảng (db.coll.createIndex({ "tags": 1 })) để tăng tốc truy vấn. MongoDB sẽ tạo multikey index tự động.