désolé pour mon anglais ..Comment comparer les champs en AggregateFunction
je dois comparer les user'param (MonthYear/6characters) avec les TxtDtVts sur le terrain (une date avec 7 ou 8 caractères) Si elles correspondent, il doit retourner les champs « CodeTva » et « TauxTVA » par le mois désiré
ci-dessous est ma collection « billets »:
{
"_id" : ObjectId("59e66bdda00472964e6a950b"),
"Pharma" : "HEA00001",
"TxtDtVts" : 2012016, // Or 22012016 (7 or 8 characts)
"TxtHrsVts" : 842,
"NumVts" : 845613,
"NumEmp" : 19,
"NumPoste" : 127,
"PVHT" : 1.0575,
"CodeTva" : 4,
"TauxTVA" : 2.1,
"PVTTC" : 1.08,
}
Voici mon point final et ma fonction d'agrégation:
secureRoutes.route('/ticketTVA/month/:MonthYear') // Example 012016
.get(function(req, res){
var mois= req.params.month;
Ticket.aggregate([
{$project:{
TxtDtVts:1,
Correspondance: {
$let: {
vars: {
monthSubstring: { $substr: [ "$TxtDtVts", 0, -1 ] },
moisReq:{$substr: ["$mois",0,-1]},
},
in: { $cmp: [ "$$monthSubstring", "$$moisReq" ] }
}
}
}},
],function (err, result) {
if (err) {
console.log(err);
return;
}
console.log(result);
res.json(result);
});
})
J'ai essayé d'utiliser $ substr pour convertir des données en chaîne, les sauvegarder dans vars et utiliser $ cmp pour les comparer.
Si je fais ça (sans match avant), j'ai une erreur: errmsg: 'aggregation result exceeds maximum document size (16MB)
Plus, il est une mauvaise façon parce que le changement de longueur TxtDtVts (1.012.016 OU 10012016) .. Comment comparer ces 2 données et si elle correspond , retourne moi "CodeTva" et "TauxTVA"?
Nous vous remercions à l'avance
TxtDtVts semble être un entier, pas une chaîne ou une date. Pourriez-vous expliquer un peu plus comment l'entrée de 6 caractères devrait correspondre à la sortie de 7 ou 8 caractères? –
Les 6 caractères d'entrée représentent MMYEAR. – Jbee
Donc l'entrée est une chaîne, MMYYYY, et vous comparez cela à un entier de 7 ou 8 chiffres qui est structuré comment? On dirait que MDDYYYY ou MMDDYYYY? –