Arrays 过滤数据库中文档的嵌套树?
我在《动物志》中有以下单个文件的数据结构:Arrays 过滤数据库中文档的嵌套树?,arrays,json,database,faunadb,Arrays,Json,Database,Faunadb,我在《动物志》中有以下单个文件的数据结构: "data": { "title": "Title1", "blocks": [ { "block_1": { "text": "Text1", "refs": Ref(Collection("xyz"), "XYZ"
"data": {
"title": "Title1",
"blocks": [
{
"block_1": {
"text": "Text1",
"refs": Ref(Collection("xyz"), "XYZ")
},
{
"block_2": {
"text": "Text2",
"refs": Ref(Collection("xyz"), "XYZ2")
}
]
}
假设文件已给出。
FQL中是否有方法根据“参考”值获取“块”?例如,仅基于“refs”=XYZ返回“block_1”。
即,上述示例应仅返回“block_1”
我希望问题是清楚的。请随时要求澄清:微微一笑:
谢谢你的帮助
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": [
{"text": "Text1", "refs": Ref(Collection("xyz"), 1) },
{"text": "Text2", "refs": Ref(Collection("xyz"), 2) }
]
所以FQL是
Let({
blocks: Select(["data", "blocks"], Get(Ref(Collection("Blocks"), "299664869783765505"))),
find: Filter(Var("blocks"), entity => Equals(Select(["refs"], entity), Ref(Collection("xyz"), "1")))
},
Var("find")
)
或物体
"blocks": {
"block_1": {
"text": "Text1",
"refs": Ref(Collection("xyz"), 1)
},
"block_2": {
"text": "Text2",
"refs": Ref(Collection("xyz"), 2)
}
}
FQL
非常感谢你的回答!工作得很好。我已经使用了你对数组块结构的建议。
Let({
blocks: Select(["data", "blocks"], Get(Ref(Collection("Blocks"), "299664869783765505"))),
entities: ToArray(Var("blocks")),
find: Filter(Var("entities"), entity => Equals(Select([1,"refs"], entity), Ref(Collection("xyz"), "1")))
},
ToObject(Var("find"))
)