1
Literal Expression = PurchaseOrders.pledgedDocuments[valuation.value=62500] 

采购订单结构

订单:

[  
   {
      "productId": "PURCHASE_ORDER_FINANCING",
      "pledgedDocuments" : [{"valuation" : {"value" : "62500"} }]
   }
]

文字表达式产生空结果。

然而,如果

PurchaseOrders.pledgedDocuments[valuation = null]

返回所有结果!

我究竟做错了什么 ?

在此处输入图像描述

4

1 回答 1

1

我能够使用flatten函数来解决 - 但不知道它是如何工作的:(

在您最初的问题中,我并不清楚您的最终目标是什么,因此我将尝试提供一些参考。

值过滤

首先,你PurchaseOrders -> pledgedDocuments -> valuation -> value似乎是一个字符串,所以在你原来的问题试图过滤

引用:

... [valuation.value=62500] 

不会帮助你。

你需要过滤到更多的东西~比如:valuation.value="62500"

列表投影

在您最初的问题中,您正在投影PurchaseOrderswhich is a list 并再次访问pledgedDocumentswhich is a list !

所以当你这样做时:

引用:

PurchaseOrders.pledgedDocuments (...)

你没有一个简单的清单;你有一个清单清单,它是所有已承诺文件清单的清单。

最终解决方案

我相信你想要的是:

flatten(PurchaseOrders.pledgedDocuments)[valuation.value="62500"] 

让我们在纸上练习一下实际发生的事情。

第一的,

让我们专注于PurchaseOrders.pledgedDocuments

您提供PurchaseOrders的是采购订单列表,然后您在pledgedDocuments.

那中间结果是什么?参考 PO 的原始问题输入值,它是:

[  
   [{"valuation" : {"value" : "62500"} }]
]

注意它是一个列表列表吗?

用表达式的第一部分PurchaseOrders.pledgedDocuments,你问:对于每个 PO,给我承诺文件的清单。

根据假设,如果您提供 3 个 PO,并且每个 PO 有 2 个文档,那么您将PurchaseOrders.pledgedDocuments再次获得 3 个元素的结果列表,每个元素实际上是 2 个元素的列表。

现在,

flatten(PurchaseOrders.pledgedDocuments)您一起实现:

[{"valuation" : {"value" : "62500"} }]

因此,此时您有一个包含所有文档的列表,无论是哪个 PO。

现在,

使用flatten(PurchaseOrders.pledgedDocuments)[valuation.value="62500"]完整的表达式,您仍然可以实现:

[{"valuation" : {"value" : "62500"} }]

因为您已经在展平列表上要求,只保留那些包含valuation.value等于"62500"字符串的元素。

换句话说,如果你使用了这个表达式,你得到的是:

从任何 PO 中,将评估值等于字符串 62500 的文档返回给我,无论该文档属于哪个 PO。

于 2021-08-22T10:07:30.007 回答