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

Truy vấn phần tử thứ n (chỉ số biến đổi) của mảng subdocument MongoDB

Sử dụng $let định nghĩa biến tạm và $expr với $arrayElemAt để truy cập phần tử theo chỉ số động. Tạo collection:

> db.demo72.insertOne({
   StudentDetails: [
      { "Name": "Chris", "Age": 21 },
      { "Name": "David", "Age": 23 },
      { "Name": "Bob", "Age": 20 }
   ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e29b4ad71bf0181ecc42269") }

Hiển thị tài liệu:

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

Truy vấn: kiểm tra phần tử index 1 (thứ 2) có Name = "David":

> db.demo72.find({
   $expr: {
      $let: {
         vars: { fst: { $arrayElemAt: [ "$StudentDetails", 1 ] } },
         in: { $eq: [ "$$fst.Name", "David" ] }
      }
   }
})

Kết quả - khớp vì phần tử index 1 là David:

Giải thích: $arrayElemAt: ["$StudentDetails", 1] lấy phần tử index 1 (0-based). $let gán vào biến $$fst. $expr cho phép dùng biểu thức aggregation trong find. Chỉ số có thể là biến/biểu thức động.