如何领域比较成聚合函数
问题描述:
对不起,我的英语..如何领域比较成聚合函数
我需要如果它们匹配比较user'param(MonthYear/6characters)与外地TxtDtVts(含7个或8个字符的日期) ,
{
"_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,
}
这里我的终点,我的聚合函数:
必须由所需月份下面是我收集的“入场券”归还领域“CodeTva”和“TauxTVA”
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);
});
})
我试图使用$ substr将数据转换为字符串,将它们保存在变量中并使用$ cmp来比较它们。
如果我这样做(没有比赛之前),我有一个错误:因为TxtDtVts长度变化(1012016或10012016).. 我怎么能比较这2个数据errmsg: 'aggregation result exceeds maximum document size (16MB)
更多,这是一个不错的方法,如果它匹配,还给我“CodeTva”和“TauxTVA”?
预先感谢您
答
试试这个关于大小:请您输入的int,而不是字符串。很容易接受你的意见,并做到这一点。然后:
db.foo.aggregate([
{ $addFields: {
"rc": {$eq: [{$divide:[{ "$subtract": [ "$date", input ] },1000000]},
{$trunc: {$divide:[{ "$subtract": [ "$date", input ] },1000000]}} ]}
}}
,{ $match: {"rc":true}}
]);
的想法是取一个日期等8022013(2013年2月8日)或25121970(1970年12月25日) 和减去关闭MMYYYY组件。因此,输入22013(字符串“022013”的int版本,请注意引导零如何下降)产生8000000.除以1000000以浮点和整数为基础产生相同的数字(8)。如果DB日期是8032013,那么差异是8010000.这产生了不等于8和8.01。
答
我找到了解决办法
jrsDuMois= [];
var i = 1;
for (; i <= 31; i++) {
jrsDuMois.push(parseInt(i+""+mois));
}
,我和我的数组“jrsDuMois”比较场TxtDtVts:
{ "$match": {
"TxtDtVts": { "$in": jrsDuMois },
}},
TxtDtVts似乎是一个整数,而不是字符串或日期。你能否解释一下6字符输入应该如何匹配7或8个字符的输出? –
输入的6个字符表示MMYEAR。 – Jbee
所以输入是一个字符串,MMYYYY,你将它与一个7或8位数的整数进行比较,结构如何?看起来像MDDYYYY或MMDDYYYY? –