【问题标题】:How can I query data from FaunaDb if only some collections have a specific property which I need to filter out如果只有某些集合具有我需要过滤掉的特定属性,我如何从 FaunaDb 查询数据
【发布时间】:2022-01-14 01:21:48
【问题描述】:

我真的是 FaunaDb 的新手,我目前有一个用户集合和该集合中的一个索引:(users_waitlist),它的字段较少。 创建新用户时,“waitlist_meta”属性最初是一个空数组,当该用户更新以加入候补名单时,一个新字段将添加到用户的 waitlist_meta 数组中。 现在,我试图仅将包含添加项目的集合添加到 waitlist_meta 数组中(顺便说一下,它是对另一个索引(产品)的引用)。换句话说:如果数组包含项目,则返回集合/索引 我怎样才能做到这一点?通过运行此查询:

Paginate(Match(Index('users_waitlist')))

显然,我仍在获取所有带有空数组的集合 (waitlist_meta: [])

提前致谢

【问题讨论】:

    标签: faunadb


    【解决方案1】:

    您需要在索引中添加术语,简要说明here

    我发现将其概念化的方法是,当您将术语添加到索引时,它会被划分为单独的存储桶,以便稍后当您将该索引与特定术语匹配时,返回来自该特定存储桶的结果。

    这里的情况稍微复杂一些,因为您需要将实际字段(waitlist_meta 的实际值)转换为其他内容(waitlist_meta 是否已定义?) - 在动物群中,这称为绑定。你需要一些类似的东西:

    CreateIndex({
      "name": "users_by_is_on_waitlist",
      "source": [{
        "collection": Collection("users"),
        "fields": {
          "isOnWaitlist": Query(Lambda("doc", ContainsPath(["data", "waitlist_meta"], Var("doc"))))
        }
      }],
      "terms": [{
        "binding": "isOnWaitlist"
      }]
    })
    

    这个绑定的作用是为集合中的每个文档运行一个Lambda,以根据文档的字段计算一个属性,在我们的例子中是isOnWaitlist,它由文档是否包含该字段来定义waitlist_meta。然后我们将此绑定作为术语添加到索引中,这意味着我们稍后可以使用以下命令查询索引:

    Paginate(Match("users_by_is_on_waitlist", true))

    true 这里是我们索引的单个术语(如果我们的索引有多个术语,它可以是一个数组)。此查询现在应返回已添加到候补名单中的所有用户!

    【讨论】:

    • 感谢您的解释。根据您的解释,我找到了一种在创建用户时添加“waitlist_meta”字段的方法,以使事情变得更容易(我认为)。我更新了我的问题,提前感谢您的帮助
    • @AlexYepes 如果我理解正确,您只需要在上面的 sn-p 中更改这一行:"isOnWaitlist": Query(Lambda("doc", Not(IsEmpty(Select(["data", "waitlist_meta"], Var("doc"))))))。如果您需要获取特定产品 ref 的候补名单上的用户,那么您只需使用 waitlist_meta 字段作为没有绑定的索引词
    • 是的!这正是我想要的。非常感谢!!!我只用IsNull而不是IsEmpty做了一个微小的改变
    猜你喜欢
    • 1970-01-01
    • 2018-02-23
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多