Literal Expression = PurchaseOrders.pledgedDocuments[valuation.value=62500] 采购订单结构
PurchaseOrders:
[
{
"productId": "PURCHASE_ORDER_FINANCING",
"pledgedDocuments" : [{"valuation" : {"value" : "62500"} }]
}
]文字表达式产生空结果。
不过,如果
PurchaseOrders.pledgedDocuments[valuation = null]把所有结果都还给我!
我做错什么了?

发布于 2021-08-22 10:07:30
我能够用
flatten函数来解决--但不知道它是如何工作的:
在你最初的问题中,我不太清楚你的最终目标是什么,所以我会尝试提供一些参考。
值滤波
首先,您的PurchaseOrders -> pledgedDocuments -> valuation -> value似乎是一个字符串,所以在您最初的问题中试图通过
引用:
... [valuation.value=62500] 也帮不了你。
您需要过滤到更类似的东西:valuation.value="62500"
列表投影
在您最初的问题中,您正在投影在PurchaseOrders上,它是一个列表,而访问pledgedDocuments又是一个列表!
所以当你这么做的时候
引用:
PurchaseOrders.pledgedDocuments (...)您没有一个简单的列表;您有一个列表列表,它是所有承诺文件列表的列表。
最终解
我相信你想要的是
flatten(PurchaseOrders.pledgedDocuments)[valuation.value="62500"] 让我们在纸上练习一下到底发生了什么。
第一,
让我们关注PurchaseOrders.pledgedDocuments。
您提供PurchaseOrders,这是一个POs列表,然后在pledgedDocuments上进行项目。
中间结果是什么?引用POs的原始问题输入值,它是:
[
[{"valuation" : {"value" : "62500"} }]
]注意它是一个列表吗?
在表达式的第一部分,PurchaseOrders.pledgedDocuments,您已经问到:对于每个PO,给我承诺文件的列表。
根据假设,如果您提供了3个POs,并且每个都有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
https://stackoverflow.com/questions/68853803
复制相似问题