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

Hvordan FILTERER jeg returnerede data mellem to datoer fra mongodb ved hjælp af en aggregering:match, opslag og projekt?

Din løsning ser næsten rigtig ud, forudsat at dateStart og dateStart er faktisk Date objekter og ikke String s.

Din Prøv 2 var ufuldstændig Jeg er ikke sikker på, at den bruger $lookup fra Prøv 1 eller ikke. Hvis det er tilfældet, skal du sørge for outputtet af $lookup er det samme som input af $filter . Så du bør ændre as i $lookup for at matche input af $filter

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

}

Alternativ løsning

Jeg er ikke sikker på, hvad du vil have som output. Hvis du kun har brug for en række meddelelser uden brugerobjektet, kan du prøve følgende.

[{
  $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. Hvordan serialiseres et kort i Java til lagring i Redis?

  2. Hvorfor kan jeg ikke fejlsøge kode i en async-metode?

  3. Mongodb findOneAndUpdate-funktionen indsætter nyt dokument

  4. forbinder til lokal mongodb fra docker container