Maison > Questions et réponses > le corps du texte
Je suis nouveau sur MongoDB. Je souhaite utiliser match pour obtenir uniquement les enregistrements des 2 dernières années. Existe-t-il un moyen de le faire sans coder en dur ?
Par exemple, nous sommes en 2023. Mais la dernière année enregistrée dans ma collection est 2021. Je souhaite obtenir les enregistrements de Ma Collection des 2 dernières années, pas de l'année en cours. La fourchette sera donc 2019-2021, au lieu de 2021-2023.
Existe-t-il un moyen de le faire sans coder en dur l'année dans une chaîne ?
Je souhaite obtenir ces informations afin de pouvoir les utiliser lors de la prochaine étape
Actuellement, j'ai ceci, codé en dur
{ $match: { fechaOrden: { $gte: ISODate("2018-01-01"), $lt: ISODate("2020-02-01"), }, }, }, ] ```
P粉1460805562024-01-30 13:18:01
Vous pouvez utiliser $setWindowFields
来抓取文档近2年的记录。然后,使用 $sort
+ $limit
pour rechercher le dernier enregistrement de toute la collection et renvoyer les enregistrements associés des 2 dernières années.
db.collection.aggregate([ // compute latest records in 2 years { $setWindowFields: { sortBy: { dt: 1 }, output: { recentRecords: { $push: "$$ROOT", window: { range: [ -2, 0 ], unit: "year" } } } } }, // find latest records in whole collection { "$sort": { dt: -1 } }, { $limit: 1 }, // cosmetics { "$unwind": "$recentRecords" }, { "$replaceRoot": { "newRoot": "$recentRecords" } } ])