sql >> Database >  >> NoSQL >> MongoDB

Hoe FILTER ik gegevens tussen twee datums van mongodb met behulp van een aggregatie:match, lookup en project?

Uw oplossing ziet er bijna goed uit, op voorwaarde dat dateStart en dateStart zijn eigenlijk Date objecten en niet String v.

Je Probeer er 2 was onvolledig Ik weet niet zeker of het de $lookup . gebruikt van Probeer 1 of niet. Als dit het geval is, moet u ervoor zorgen dat de uitvoer van $lookup is hetzelfde als invoer van $filter . Dus je moet veranderen as in $lookup overeenkomen met input van $filter

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

}

Alternatieve oplossing

Ik weet niet zeker wat je als output wilt. Als je alleen een reeks meldingen nodig hebt zonder het gebruikersobject, kun je het volgende proberen.

[{
  $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. MongoDB samengestelde index gebruik

  2. Inleiding tot Redis

  3. Mongo Geeft 'dubbele sleutelfout' op niet-unieke velden

  4. MongoDB C# Array-index of indexering van innerlijke items van arrays