Để tìm giao của các mảng trong MongoDB, sử dụng toán tử $setIntersection trong pipeline aggregate().
Tạo collection với dữ liệu điểm số
> db.demo625.insertOne({ Name: "John", Marks: [56,98,60] });
{ "acknowledged" : true, "insertedId" : ObjectId("5e9ab8e16c954c74be91e6aa") }
> db.demo625.insertOne({ Name: "John", Marks: [110,56,72] });
{ "acknowledged" : true, "insertedId" : ObjectId("5e9ab8e26c954c74be91e6ab") }
> db.demo625.insertOne({ Name: "Chris", Marks: [90,91] });
{ "acknowledged" : true, "insertedId" : ObjectId("5e9ab8e26c954c74be91e6ac") }
> db.demo625.insertOne({ Name: "Robert", Marks: [60,75] });
{ "acknowledged" : true, "insertedId" : ObjectId("5e9ab8e26c954c74be91e6ad") }
Hiển thị tất cả document
> db.demo625.find();
Kết quả:
{
"_id" : ObjectId("5e9ab8e16c954c74be91e6aa"), "Name" : "John", "Marks" : [ 56, 98, 60 ]
}
{
"_id" : ObjectId("5e9ab8e26c954c74be91e6ab"), "Name" : "John", "Marks" : [ 110, 56, 72 ]
}
{
"_id" : ObjectId("5e9ab8e26c954c74be91e6ac"), "Name" : "Chris", "Marks" : [ 90, 91 ]
}
{
"_id" : ObjectId("5e9ab8e26c954c74be91e6ad"), "Name" : "Robert", "Marks" : [ 60, 75 ]
}
Truy vấn tìm giao với mảng [56,98,60]
> db.demo625.aggregate([
{
"$project": {
"Name": 1,
"Marks": {
"$setIntersection": [ "$Marks", [56,98,60] ]
}
}
}
])
Kết quả - chỉ giữ lại các giá trị xuất hiện trong cả hai mảng:
{
"_id" : ObjectId("5e9ab8e16c954c74be91e6aa"), "Name" : "John", "Marks" : [ 56, 60, 98 ]
}
{
"_id" : ObjectId("5e9ab8e26c954c74be91e6ab"), "Name" : "John", "Marks" : [ 56 ]
}
{
"_id" : ObjectId("5e9ab8e26c954c74be91e6ac"), "Name" : "Chris", "Marks" : [ ]
}
{
"_id" : ObjectId("5e9ab8e26c954c74be91e6ad"), "Name" : "Robert", "Marks" : [ 60 ]
}
Giải thích: $setIntersection trả về mảng chứa các phần tử chung giữa mảng trường Marks và mảng tham chiếu [56,98,60]. Kết quả được sắp xếp theo thứ tự tăng dần.