【问题标题】:Ideas how to store code snippets/objects (not json) in mongodb?想法如何在mongodb中存储代码片段/对象(不是json)?
【发布时间】:2018-06-12 15:20:31
【问题描述】:

假设我正在 node.js 中将 csv 转换为 json,并在客户输入文件中找到的字段与我的平台所需的对象之间进行映射,例如:

 var objInvoice = {
        "id" : guid.create().value, 
        "financingType" : "scf", 
        "batchId" : batchId, 
        "recordTypeCode" : inv.kayittipi, 
        "buyerReference" : result[0].tedarikcireferans, 
        "supplierReference" : inv.tedarikcireferans, 
        "invoiceDate" : moment(inv.faturatarih +"-140000"  , "YYMMDD-HHmmss").toISOString(), 
        "certifiedInvoiceAmount" : inv.odenecekfaturatutar, 
        "currencyCode" : inv.parabirimi, 
        "maturityDate" : moment(inv.orjvadetarihi +"-140000"  , "YYMMDD-HHmmss").toISOString(), 
        "correctedMaturityDate" : moment(inv.orjvadetarihi +"-140000"  , "YYMMDD-HHmmss").toISOString(), 
        "originalInvoiceAmount" : inv.orjfaturatutar, 
        "invoiceNo" : inv.faturano, 
        "invoiceSerialNo" : inv.faturaserino, 
        "noterizedDocNo" : inv.belgenoteryevmiyeno, 
        "hashCode" : inv.hashCode, 
        "forecastDate" : inv.fiilivadetarihi, 
        "supplierTaxId" : inv.tedarikcivkn, 
        "supplierName" : inv.tedarikciadi, 
        "invoiceType" : inv.faturatipi, 
        "buyerAccountNumber" : inv.aliciiban, 
        "buyerTaxId" : inv.alicivkn, 
        "fiReference" : inv. bankakodu, 
        "bankBranchCode" : inv.bankasubeno, 
        "invoiceUploadStatus" : inv.dosyakayitstatu, 
        "gwCode" : "111110000000", 
        "gwCodeExplanation" : "", 
        "invoiceDiscountDate" : null, 
        "additionalInformation1" : inv.aciklama1, 
        "additionalInformation2" : inv.aciklama2,
        "additionalInformation3" : inv.aciklama3,
        "lastModificationDate" : null, 
        "newInvoiceId" : "00000000-0000-0000-0000-000000000000", 
        "oldInvoiceId" : "00000000-0000-0000-0000-000000000000", 
        "supplierIban" : "", 
        "supplierBankName" : "", 
        "customUniqueId" : "", 
        "deductionReason" : "", 
        "paymentObligationNo" : null, 
        "deductionAmount" : "", 
        "sellAmount" : "", 
        "invoiceAmountWithoutVat" : "",
        "uploadDate" : now.toISOString(), 

    } 

但客户2可能有不同的定位字段,甚至文件中的不同标题 - 例如:

var objInvoice = {
        "id" : guid.create().value, 
        "financingType" : "scf", 
        "batchId" : batchId, 
        "recordTypeCode" : inv.element1, 
        "buyerReference" : result[0].element2, 
        "supplierReference" : inv.element2, 
        "invoiceDate" : moment(inv.element3 +"-140000"  , "YYMMDD-HHmmss").toISOString(), 
        "certifiedInvoiceAmount" : inv.element4, 
        "currencyCode" : inv.element5, 
        "maturityDate" : moment(inv.element6 +"-140000"  , "YYMMDD-HHmmss").toISOString(), 
        "correctedMaturityDate" : moment(inv.element6 +"-140000"  , "YYMMDD-HHmmss").toISOString(), 
        "originalInvoiceAmount" : inv.element7, 
        "invoiceNo" : inv.element8, 
        "invoiceSerialNo" : inv.element9, 
        "noterizedDocNo" : inv.element10, 
        "hashCode" : inv.element11, 
        "forecastDate" : inv.element12, 
        "supplierTaxId" : inv.element13, 
        "supplierName" : inv.element14, 
        "invoiceType" : inv.element15, 
        "buyerAccountNumber" : inv.element16, 
        "buyerTaxId" : inv.element17, 
        "fiReference" : inv. element18, 
        "bankBranchCode" : inv.element19, 
        "invoiceUploadStatus" : inv.element20, 
        "gwCode" : "111110000000", 
        "gwCodeExplanation" : "", 
        "invoiceDiscountDate" : null, 
        "additionalInformation1" : inv.element21, 
        "additionalInformation2" : inv.element22,
        "additionalInformation3" : inv.element23,
        "lastModificationDate" : null, 
        "newInvoiceId" : "00000000-0000-0000-0000-000000000000", 
        "oldInvoiceId" : "00000000-0000-0000-0000-000000000000", 
        "supplierIban" : "", 
        "supplierBankName" : "", 
        "customUniqueId" : "", 
        "deductionReason" : "", 
        "paymentObligationNo" : null, 
        "deductionAmount" : "", 
        "sellAmount" : "", 
        "invoiceAmountWithoutVat" : "",
        "uploadDate" : now.toISOString(), 

     }

所以我在想是否可以将每个客户的每个“映射”存储在 mongodb 中?并通过客户参考提取正确的 objInvoice?

问题是,objInvoice 不能存储为 json 文档,因为它包含诸如 inv.element1 之类的变量。

我还尝试将其存储为一个大字符串(我尝试使用 {} 而没有 {} ),我能够很好地存储它,但是当我从代码中提取它并取消字符串化时,vars 没有按预期进行处理。

优秀的程序员有什么想法吗?

或者唯一的方法是将它们存储在每个客户的单独 js 文件中?

【问题讨论】:

  • 您是否使用 JSON.stringify 和 JSON.parse(去)字符串化?另外,不同的顺序是否重要并且需要保存?
  • 我尝试过 JSON.parse,但该对象毕竟不是有效的 json 对象,因为它包含变量(json 值需要是字符串或数字或布尔值) - 我确实尝试存储它们作为字符串,但在我将其转回对象后,变量没有在代码中得到处理。顺序如何影响逻辑?
  • 不幸的是,这甚至不是一个有效的 Javascript 对象...您应该重组您的数据以成为有效的 Javascript 对象和/或 JSON

标签: json node.js mongodb


【解决方案1】:

很遗憾,您的数据甚至不是有效的 Javascript 对象或 JSON。

一个想法是将无效的值(如moment(inv.orjvadetarihi +"-140000" , "YYMMDD-HHmmss").toISOString())转换为字符串(正确转义)。因此,您将能够JSON.stringifyJSON.parse。然后字符串可以在您的代码中为evaluated。

预处理您的数据以将非字符串值转义为字符串当然可以。您可以使用正则表达式。

【讨论】:

  • 这完全取决于您的代码。如果它不是最简单的形式,一些更复杂的 eval 逻辑取决于某些解析将。如果迫在眉睫,您将不得不解析。
  • eval 就像一个魅力,我所要做的就是从 mongo 获取 (dbobjInvoice) 然后 var objInvoice = eval(dbobjInvoice) ....其中 dbobjInvoice 是存储在 mongodb 中的一个大字符串
  • 太棒了,很高兴能帮上忙
猜你喜欢
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-21
  • 2011-08-10
  • 1970-01-01
  • 2018-12-25
  • 2011-01-31
相关资源
最近更新 更多