微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决在 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"))
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。