问题描述
我在 Fauna 中有以下单个文档的数据结构:
"data": {
"title": "Title1","blocks": [
{
"block_1": {
"text": "Text1","refs": Ref(Collection("xyz"),"XYZ")
},{
"block_2": {
"text": "Text2","XYZ2")
}
]
}
说文档是给定的。 FQL 中有没有办法根据“引用”值获取“块”?例如。仅根据“refs”=XYZ 返回“block_1”。 IE。上面的例子应该只返回“block_1”。
我希望问题很清楚。随时要求澄清。 :slight_smile:
感谢您的帮助。
解决方法
Let({
blocks: Select(["data","blocks"],Get(Ref(Collection("Blocks"),"299664869783765505"))),entitiesArray: Map(Var("blocks"),block => ToArray(block)),entities: Reduce((acc,value) => Append(acc,value),[],Var("entitiesArray")),find: Filter(Var("entities"),entity => Equals(Select([1,"refs"],entity),Ref(Collection("xyz"),"1")))
},ToObject(Var("find"))
)
但我建议修改 blocks
结构。尝试将其保留为数组
"blocks": [
{"text": "Text1","refs": Ref(Collection("xyz"),1) },{"text": "Text2",2) }
]
FQL 应该是
Let({
blocks: Select(["data",find: Filter(Var("blocks"),entity => Equals(Select(["refs"],Var("find")
)
或者一个对象
"blocks": {
"block_1": {
"text": "Text1",1)
},"block_2": {
"text": "Text2",2)
}
}
FQL
Let({
blocks: Select(["data",entities: ToArray(Var("blocks")),ToObject(Var("find"))
)