sql >> Databasteknik >  >> NoSQL >> MongoDB

Hur FILTRER jag returnerad data mellan två datum från mongodb med hjälp av en aggregering:matchning, lookup och projekt?

Din lösning ser nästan rätt ut, förutsatt att dateStart och dateStart är faktiskt Date objekt och inte String s.

Din Prova 2 var ofullständig Jag är inte säker på att den använder $lookup från Prova 1 eller inte. Om så är fallet måste du se till att utdata från $lookup är samma som inmatning av $filter . Så du bör ändra as i $lookup för att matcha input av $filter

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

}

Alternativ lösning

Jag är inte säker på vad du vill ha som utdata. Om du bara behöver en rad aviseringar utan användarobjektet kan du prova följande.

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



  1. Är det möjligt att sortera, gruppera och begränsa effektivt i Mongo med en pipeline?

  2. Överför modellparametrar till en mangustmodell

  3. symfony2 form val och mongodb

  4. Node.js - Session kvarstår inte genom res.redirect()