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

Lấy dữ liệu giao của mảng (array intersection) trong MongoDB

Để 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.