Votre solution semble presque correcte, à condition que dateStart
et dateStart
sont en fait Date
objets et non String
s.
Votre Essai 2 était incomplet, je ne suis pas sûr qu'il utilise le $lookup
à partir de Essayez 1 ou non. Si c'est le cas, vous devez vous assurer que la sortie de $lookup
est identique à l'entrée de $filter
. Donc, vous devriez changer as
dans $lookup
pour correspondre à input
de $filter
{
$lookup: {
from: "notifications",
localField: "accessToken",
foreignField: "accessToken",
as: "items" // here
}
}
Solution alternative
Je ne sais pas ce que vous voulez comme sortie. Si vous n'avez besoin que d'un tableau de notifications sans l'objet utilisateur, vous pouvez essayer ce qui suit.
[{
$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' }
}]