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

Truy cập đối tượng trong mảng MongoDB bằng dot notation

Khi mảng chứa các đối tượng, dot notation cho phép truy vấn dựa trên trường bên trong các đối tượng đó. MongoDB sẽ khớp tài liệu nếu ít nhất một phần tử trong mảng thoả mãn điều kiện.

Dữ liệu mẫu

> db.demo299.insertOne( { "id":100, "Name":"Robert", "details":[ { "SubjectName":["C++","Python"] }, { "SubjectName":["Spring","Hibernate"] } ] } );
{ "acknowledged" : true, "insertedId" : ObjectId("5e4d685a5d93261e4bc9ea4b") }
> db.demo299.insertOne( { "id":101, "Name":"Adam", "details":[ { "SubjectName":["Python","JSP"] }, { "SubjectName":["Servlet","Operating System"] } ] } );
{ "acknowledged" : true, "insertedId" : ObjectId("5e4d685b5d93261e4bc9ea4c") }

Xem dữ liệu

> db.demo299.find();
{ "_id" : ObjectId("5e4d685a5d93261e4bc9ea4b"), "id" : 100, "Name" : "Robert", "details" : [ { "SubjectName" : [ "C++", "Python" ] }, { "SubjectName" : [ "Spring", "Hibernate" ] } ] }
{ "_id" : ObjectId("5e4d685b5d93261e4bc9ea4c"), "id" : 101, "Name" : "Adam", "details" : [ { "SubjectName" : [ "Python", "JSP" ] }, { "SubjectName" : [ "Servlet", "Operating System" ] } ] }

Truy vấn: Tìm tài liệu có "Servlet" trong SubjectName

> db.demo299.find({"details.SubjectName":"Servlet"});

Kết quả

{ "_id" : ObjectId("5e4d685b5d93261e4bc9ea4c"), "id" : 101, "Name" : "Adam", "details" : [ { "SubjectName" : [ "Python", "JSP" ] }, { "SubjectName" : [ "Servlet", "Operating System" ] } ] }

Giải thích: Truy vấn {"details.SubjectName":"Servlet"} kiểm tra từng phần tử trong mảng details. Nếu bất kỳ phần tử nào có mảng SubjectName chứa "Servlet", toàn bộ tài liệu được trả về. Để chỉ trả về phần tử khớp, dùng $elemMatch trong projection hoặc aggregation $filter.