如何将字段与AggregateFunction进行比较

时间:2017-10-18 13:19:46

标签: mongodb aggregate

抱歉我的英语..

我需要将用户' 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; ?

提前谢谢

2 个答案:

答案 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 },
      }},