Twoje rozwiązanie wygląda prawie dobrze, pod warunkiem, że dateStart
i dateStart
są w rzeczywistości Date
obiekty, a nie String
s.
Twój Wypróbuj 2 był niekompletny Nie jestem pewien, czy używa $lookup
z Wypróbuj 1 albo nie. Jeśli tak, upewnij się, że wyjście $lookup
jest takie samo jak wejście $filter
. Powinieneś więc zmienić as
w $lookup
aby dopasować input
z $filter
{
$lookup: {
from: "notifications",
localField: "accessToken",
foreignField: "accessToken",
as: "items" // here
}
}
Alternatywne rozwiązanie
Nie jestem pewien, co chcesz jako wyjście. Jeśli potrzebujesz tylko tablicy powiadomień bez obiektu użytkownika, możesz wypróbować następujące.
[{
$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' }
}]