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).$letgán vào biến$$fst.$exprcho phép dùng biểu thức aggregation trong find. Chỉ số có thể là biến/biểu thức động.