如果只有某些集合具有我需要过滤掉的特定 属性,我如何从 FaunaDb 查询数据

How can I query data from FaunaDb if only some collections have a specific property which I need to filter out

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

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

显然,我仍然使用空数组 (waitlist_meta: [])

获取所有集合

提前致谢

您需要将术语添加到您的索引中,这些术语会进行简要说明 here

我发现将其概念化的有用方式是,当您将术语添加到索引时,它会被划分到单独的存储桶中,以便稍后当您将该索引与特定术语匹配时,该特定存储桶的结果是 returned.

这里的情况稍微复杂一些,因为您需要将您的实际字段(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 是我们索引的单个术语(如果我们的索引有多个术语,它可以是一个数组)。此查询现在应该 return 所有已添加到候补名单的用户!