Вашето решение изглежда почти правилно, при условие че dateStart
и dateStart
всъщност са Date
обекти, а не String
с.
Вашият Опитайте 2 беше непълна. Не съм сигурен, че използва $lookup
от Опитайте 1 или не. Ако е така, трябва да се уверите, че изходът на $lookup
е същото като въвеждането на $filter
. Така че трябва да промените as
в $lookup
за да съответства на input
на $filter
{
$lookup: {
from: "notifications",
localField: "accessToken",
foreignField: "accessToken",
as: "items" // here
}
}
Алтернативно решение
Не съм сигурен какво искате като изход. Ако имате нужда само от масив от известия без потребителския обект, можете да опитате следното.
[{
$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' }
}]