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

Tìm kiếm mảng đối tượng trong MongoDB có thể không?

Có, để tìm kiếm mảng đối tượng, sử dụng $unwind trong aggregate() kết hợp $match để lọc.

Tạo collection với mảng đối tượng lồng nhau

> db.demo623.insertOne({
  _id: 1,
  details: [
    { Name: "Chris" },
    { DueDate: new ISODate("2020-01-10") },
    { CountryName: "US" }
  ]
});
{ "acknowledged" : true, "insertedId" : 1 }

Hiển thị document

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

Kết quả:

{
  "_id" : 1,
  "details" : [
    { "Name" : "Chris" },
    { "DueDate" : ISODate("2020-01-10T00:00:00Z") },
    { "CountryName" : "US" }
  ]
}

Truy vấn tìm kiếm với $unwind và $match

> db.demo623.aggregate([
  { $unwind: "$details" },
  { $match: { "details.Name": "Chris" } },
  { $project: { "details.Name": 1 } }
])

Kết quả:

{
  "_id" : 1,
  "details" : { "Name" : "Chris" }
}

Giải thích quy trình:

  1. $unwind: "$details": Phân rã mảng details thành các document riêng biệt, mỗi document chứa một phần tử của mảng
  2. $match: { "details.Name": "Chris" }: Lọc giữ lại document có trường Name bằng "Chris"
  3. $project: Chỉ chọn trường cần thiết cho kết quả đầu ra

Cách này hiệu quả khi cần tìm kiếm sâu vào các đối tượng bên trong mảng.