我能够使用flatten
函数来解决 - 但不知道它是如何工作的:(
在您最初的问题中,我并不清楚您的最终目标是什么,因此我将尝试提供一些参考。
值过滤
首先,你PurchaseOrders -> pledgedDocuments -> valuation -> value
似乎是一个字符串,所以在你原来的问题试图过滤
引用:
... [valuation.value=62500]
不会帮助你。
你需要过滤到更多的东西~比如:valuation.value="62500"
列表投影
在您最初的问题中,您正在投影PurchaseOrders
which is a list 并再次访问pledgedDocuments
which 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。