Đây là từ cú pháp của arrayElemAt
Có nghĩa là bạn có thể xây dựng các phần tử mảng của mình theo cách bạn muốn. Trong trường hợp của bạn, bạn chỉ muốn có tên. Vì vậy, điều này sẽ hoạt động:
[{
$match: {
jobCategoryId: mongoose.Types.ObjectId(jobCategoryId)
}
}, {
$lookup: {
from: 'users',
localField: 'userId',
foreignField: '_id',
as: 'user'
}
}, {
$project: {
_id: 1,
description: 1,
title: 1,
user: {
name: {
$arrayElemAt: ["$user.name", 0]
}
}
}
}]
Cập nhật tiếp theo :người ta hỏi cách bổ sung các thuộc tính trên đầu name
. Đây là dự án:
{
$project: {
_id: 1,
description: 1,
title: 1,
user: {
name: {
$arrayElemAt: ["$user.name", 0]
},
email: {
$arrayElemAt: ["$user.email", 0]
}
}
}
}
Tiếp theo thứ hai như Drag0 đã hỏi trong phần nhận xét:Nếu điều trên không đủ tốt vì kết quả tạo ra một người dùng:[] mảng có kích thước 1 thay vì một người dùng đối tượng:{} có thể sử dụng phần sau.
{
$project: {
_id: 1,
description: 1,
title: 1,
user: {
$let: {
vars: {
firstUser: {
$arrayElemAt: ["$user", 0]
}
},
in: {
name: "$$firstUser.name",
email: "$$firstUser.email"
}
}
}
}
}