sql >> Databáze >  >> NoSQL >> MongoDB

Jak FILTER vrátím data mezi dvěma daty z mongodb pomocí agregace:zápas, vyhledávání a projekt?

Vaše řešení vypadá téměř správně, za předpokladu, že dateStart a dateStart jsou ve skutečnosti Date objekty a nikoli String s.

Váš Zkus 2 byl neúplný Nejsem si jistý, zda používá $lookup z Vyzkoušet 1 nebo ne. Pokud ano, musíte se ujistit, že výstup $lookup je stejný jako vstup $filter . Měli byste tedy změnit as v $lookup aby odpovídal input z $filter

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

}

Alternativní řešení

Nejsem si jistý, co chcete jako výstup. Pokud potřebujete pouze pole oznámení bez objektu uživatele, můžete zkusit následující.

[{
  $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. Jak $setDifference v poli a objektu pomocí Mongo DB

  2. Baňka nenačte konfiguraci

  3. Získejte všechna pole a hodnoty hash klíče pomocí redis v uzlu

  4. MongoDb - Využití multi CPU server pro zápis náročné aplikace