问题描述
我在 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