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

动物群搜索参考

如何解决动物群搜索参考

我在 products 集合中有两个文档...

{
  "ref": Ref(Collection("products"),"300137558676865540"),"ts": 1622492331145000,"data": {
    "product_id": 1004,"display_name": "Product By ABC","description": "Product Description ABC","status": "in_stock","price_current": 100,"supplier": Ref(Collection("suppliers"),"300137504766427654")
  }
},{
  "ref": Ref(Collection("products"),"300137592998855170"),"ts": 1622492386360000,"data": {
    "product_id": 1005,"display_name": "Product By XYZ","description": "Product Description XYZ","price_current": 150,"300137513423471107")
  }
}

那么我的 suppliers 集合中还有两个文档...

{
  "ref": Ref(Collection("suppliers"),"300137504766427654"),"ts": 1622492279715000,"data": {
    "supplier_id": 205,"display_name": "Test supplier ABC"
  }
},{
  "ref": Ref(Collection("suppliers"),"300137513423471107"),"ts": 1622492287963000,"data": {
    "supplier_id": 206,"display_name": "Test supplier XYZ"
  }
}

如何通过 products 引用字段搜索 supplier 集合?任何帮助表示赞赏!谢谢!

解决方法

在 Fauna 中的所有搜索都是使用索引完成的。您需要为您的“产品”集合创建一个索引,指定“供应商”作为搜索字段(也就是索引中的 terms 字段):

CreateIndex({
  name: "products_by_supplier",source: Collection("products"),terms: [{ field: ["data","supplier"]}]
})

然后您可以找到 supplier 字段与特定供应商的参考相匹配的所有产品:

> Paginate(
  Match(
    Index("products_by_supplier"),Ref(Collection("suppliers"),"300137504766427654")
  )
)
{ data: [ Ref(Collection("products"),"300137558676865540") ] }

如果要验证结果是否正确,可以遍历结果以获取关联的产品文档:

> Map(
  Paginate(
    Match(
      Index("products_by_supplier"),"300137504766427654")
    )
  ),Lambda("X",Get(Var("X")))
)
{
  data: [
    {
      ref: Ref(Collection("products"),"300137558676865540"),ts: 1622501576960000,data: {
        product_id: 1004,display_name: 'Product By ABC',description: 'Product Description ABC',status: 'in_stock',price_current: 100,supplier: Ref(Collection("suppliers"),"300137504766427654")
      }
    }
  ]
}

请注意,我的结果中的 ts 字段与您的不同,因为我刚刚创建了这些文档。

查看搜索教程了解更多详情:https://docs.fauna.com/fauna/current/tutorials/indexes/search

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