Giải pháp của bạn gần như đúng, miễn là dateStart
và dateStart
thực sự là Date
các đối tượng chứ không phải String
s.
Thử 2 của bạn chưa hoàn thành Tôi không chắc nó sử dụng $lookup
từ Thử 1 hay không. Nếu vậy, bạn phải đảm bảo đầu ra của $lookup
giống với đầu vào của $filter
. Vì vậy, bạn nên thay đổi as
trong $lookup
để khớp với input
trong số $filter
{
$lookup: {
from: "notifications",
localField: "accessToken",
foreignField: "accessToken",
as: "items" // here
}
}
Giải pháp thay thế
Tôi không chắc bạn muốn gì dưới dạng đầu ra. Nếu bạn chỉ cần mảng thông báo mà không cần đối tượng người dùng, bạn có thể thử các cách sau.
[{
$match: { userId: mongoose.Types.ObjectId(userId) }
}, {
$lookup: {
from: "notifications",
localField: "accessToken", // don't forget to index register.accessToken
foreignField: "accessToken", // don't forget to index notification.accessToken
as: "notifications"
}
}, {
$unwind: "$notifications"
}, {
$match: {
dateCreated: { $gte: dateStart, $lte: dateEnd } // dateStart, dateEnd should be Date objects
}
}, { // optional, move notifications to top lvel
$replaceRoot: { root: '$notifications' }
}]