Ihre Lösung sieht fast richtig aus, vorausgesetzt, dass dateStart
und dateStart
eigentlich Date
sind Objekte und nicht String
s.
Ihr Versuch 2 war unvollständig. Ich bin mir nicht sicher, ob es den $lookup
verwendet von Versuchen Sie 1 oder nicht. In diesem Fall müssen Sie die Ausgabe von $lookup
überprüfen ist dasselbe wie die Eingabe von $filter
. Sie sollten also as
ändern in $lookup
passend zu input
von $filter
{
$lookup: {
from: "notifications",
localField: "accessToken",
foreignField: "accessToken",
as: "items" // here
}
}
Alternative Lösung
Ich bin mir nicht sicher, was Sie als Ausgabe wollen. Wenn Sie nur ein Array von Benachrichtigungen ohne das Benutzerobjekt benötigen, können Sie Folgendes versuchen.
[{
$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' }
}]