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' }
}]