MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

In che modo FILTRO ha restituito i dati tra due date da mongodb utilizzando un'aggregazione:corrispondenza, ricerca e progetto?

La tua soluzione sembra quasi corretta, a condizione che dateStart e dateStart sono in realtà Date oggetti e non String s.

Il tuo Try 2 era incompleto non sono sicuro che utilizzi il $lookup da Prova 1 o no. Se è così devi assicurarti che l'output di $lookup è lo stesso dell'input di $filter . Quindi dovresti cambiare as in $lookup per abbinare input di $filter

{
  $lookup: {
    from: "notifications",
    localField: "accessToken",
    foreignField: "accessToken",
    as: "items" // here
  }

}

Soluzione alternativa

Non sono sicuro di cosa vuoi come output. Se hai solo bisogno di un array di notifiche senza l'oggetto utente, puoi provare quanto segue.

[{
  $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' }
}]