Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 过滤数据库中文档的嵌套树?_Arrays_Json_Database_Faunadb - Fatal编程技术网

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"))
)