gpt4 book ai didi

go - FaunaDB搜索文档并根据得分获得排名

转载 作者:行者123 更新时间:2023-12-03 10:09:10 26 4
gpt4 key购买 nike

我有以下具有结构的文档集合:

type Streak struct {
UserID string `fauna:"user_id"`
Username string `fauna:"username"`
Count int `fauna:"count"`
UpdatedAt time.Time `fauna:"updated_at"`
CreatedAt time.Time `fauna:"created_at"`
}
在FaunaDB集合中如下所示:
{
"ref": Ref(Collection("streaks"), "288597420809388544"),
"ts": 1611486798180000,
"data": {
"count": 1,
"updated_at": Time("2021-01-24T11:13:17.859483176Z"),
"user_id": "276989300",
"username": "yodanparry"
}
}
基本上,我需要一个lambda或一个接受 user_id并在集合中吐出其 等级的函数。 排名仅通过 count字段进行排序。例如,假设我有以下文档(为简单起见,我忽略了其他字段):


用户身份
数数


abc
12

y
10

fgh
999


如果我将 fgh用作此lambda函数的输入,我希望它吐出1(如果从0开始计数,则吐出0)。
我已经有一个 user_id的索引,因此我可以查询和匹配该索引中的文档引用。我也有一个索引 sorted_count,它根据 count字段升序对文档进行排序。
我当前的解决方案是通过 sorted_count索引查询所有文档,然后通过遍历数组来获得排名。我认为应该为此提供更好的解决方案。我只是没有看到它。
请帮忙。谢谢!

最佳答案

在动物区系中盘点事情并不像人们想象的那么容易。但是您可能仍然可以做比您描述的更有效率的事情。
假设您有:

CreateIndex(
{
name: "sorted_count",
source: Collection("streaks"),
values: [
{ field: ["data", "count"] }
]
}
)
然后您可以像这样查询该索引:
Count(
Paginate(
Match(Index("sorted_count")),
{ after: 10, size: 100000 }
)
)
它将返回这样的对象:
{
before: [10],
data: [123]
}
告诉您,有123个文档的 count> = 10,我认为这是您想要的。
这意味着,为了根据用户的 user_id获得用户的排名,您需要执行以下两步过程:
  • 使用您在count上的索引来确定相关用户的user_id
  • 如上所述,使用用户的sorted_count查询count

  • 请注意,如果您的收藏夹中有超过100,000个文档,则需要Go代码根据返回的对象的 after字段遍历所有页面。 100,000是Fauna允许的最大页面大小。有关详细信息,请参见 the Fauna docs on pagination
    另请注意,这可能无法反射(reflect)您想要解决联系的任何逻辑。

    关于go - FaunaDB搜索文档并根据得分获得排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65870349/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com