sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Cómo FILTRO los datos devueltos entre dos fechas de mongodb usando una agregación:coincidencia, búsqueda y proyecto?

Su solución parece casi correcta, siempre que dateStart y dateStart son en realidad Date objetos y no String s.

Tu Prueba 2 estaba incompleto, no estoy seguro de que use el $lookup desde Prueba 1 O no. Si es así, debe asegurarse de que la salida de $lookup es lo mismo que la entrada de $filter . Entonces deberías cambiar as en $lookup para coincidir con input de $filter

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

}

Solución alternativa

No estoy seguro de lo que quieres como salida. Si solo necesita una variedad de notificaciones sin el objeto de usuario, puede intentar lo siguiente.

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