我需要将用户' param(MonthYear / 6characters)与字段TxtDtVts(7或8个字符的日期)进行比较 如果匹配,则必须返回字段" CodeTva"和#34; TauxTVA"按所需的月份
下面是我的收藏"门票":
from requests import Session
from requests.auth import HTTPBasicAuth # or HTTPDigestAuth, or OAuth1, etc.
from zeep import Client
from zeep.transports import Transport
session = Session()
#session.auth = HTTPBasicAuth("USER", "PWD")
#session.verify=False
session.verify = "C:\\Users\\ID\\Desktop\\ssl-credentials.p8"
client = Client(
"https://<server>:<port>/WSDL/WSService?wsdl&mode=ws_policy",
transport=Transport(session=session))
# request_payload = { "Request" : [ ] }
request_payload = {
"Ref": "<value>",
"quantity": "<value>",
"Routing": "<value>",
"StepId": "<value>",
}
client.service.<WS>(Site="<value>", RequestContext="", Request=request_payload);
这是我的终点和我的聚合函数:
{
"_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,
}
我尝试使用$ substr将数据转换为字符串,将它们保存在变量中并使用$ cmp进行比较。
如果我这样做(之前没有匹配),我有一个错误: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);
});
})
更多,这是一个糟糕的方式,因为TxtDtVts长度变化(1012016或10012016)..
如何比较这两个数据,如果匹配,请返回我&#34; CodeTva&#34;和#34; TauxTVA&#34; ?
提前谢谢
答案 0 :(得分:0)
尝试使用大小:将输入设为int,而不是字符串。您很容易接受输入并这样做。然后:
[ { "taskid" : k, "input" : [input["name"] for input in lst if input["taskid"] == k and input["type"] == "input"], "output" : [output["name"] for output in lst if output["taskid"] == k and output["type"] == "output"] } for k in set(e["taskid"] for e in lst) ]
我们的想法是约会时间为8022013(2013年2月8日)或25121970(1970年12月25日) 并减去MMYYYY组件。因此输入22013(字符串“022013”的int版本,注意前导零如何下降)产生8000000.在浮点和整数基础上除以1000000得到相同的数字(8)。如果数据库日期为8032013,则差值为8010000.这产生8和8.01不相等。
答案 1 :(得分:0)
我找到了解决方案
jrsDuMois= [];
var i = 1;
for (; i <= 31; i++) {
jrsDuMois.push(parseInt(i+""+mois));
}
我将字段TxtDtVts与我的数组进行比较&#34; jrsDuMois&#34;:
{ "$match": {
"TxtDtVts": { "$in": jrsDuMois },
}},