在 Fauna db 中过滤嵌套的文档树?

问题描述

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