2

是否可以搜索帐户的自定义数据以查找包含在数组中的值?

就像是:

?customData.[arrayName].{key}=value

Stormpath文档没有提到数组搜索。

4

2 回答 2

4

是的,使用Stormpath,即使值存储为数组,也完全可以搜索自定义数据!

请注意,字段名称是简单的名称,值是不同的数据类型,如数组、映射、字符串等......所以查询并不像人们想象的那么复杂 :-)

例如,如果我想存储名为 的自定义数据favoriteColors,它是一个类似的数组

"favoriteColors": [ "red", "black", "blue", "white" ]

请注意,字段名称与任何其他字段名称一样。值是数组。

red要搜索在favoriteColors数组中有值的帐户,您只需要正常的查询语法:

?customData.favoriteColors=red

完整的请求(如果搜索帐户目录)可能如下所示:

https://api.stormpath.com/v1/directories/<directory_uid>/accounts?customData.favoriteColors=red

您还可以对租户资源执行相同的搜索以搜索租户范围(跨所有帐户):

https://api.stormpath.com/v1/tenants/<tenant_uid>/accounts?customData.favoriteColors=red

此查询将匹配包含redfavoriteColors数组中的帐户。如果我将查询更改为?customData.favoriteColors=yellow它将不匹配,除非yellow也添加到数组中。

于 2016-12-01T19:51:49.530 回答
3

在数组中搜索自定义数据绝对可以完成。语法是:customData.{fieldName}\[{index}\]=valuewhere{index}可以是您要查找的特定索引,或者*如果您想在数组中的任何位置找到它。(请注意,[]字符用反斜杠转义,否则查询解释器会将其与范围查询混淆。)

如果您完全不使用索引,则\[*\]暗示。更准确地说,Stormpath 将检查 中fieldName 作为数组中的元素的值fieldName。但是,只有当数组字段是搜索中的最后一个元素时,语法糖才能起作用。由于您可以将任何 JSON 对象放入自定义数据中,Stormpath 无法检查每一种可能性。想象一下类似的东西customData.foo.bar.baz.qux=bingo。Stormpath 不会试图猜测可能foo是一个数组,可能bar是不是一个数组,可能是不是baz一个数组 - 只是可能qux是一个数组或不是一个数组。因此,如果要搜索对象数组,则不能省略\[*\].

这是一个例子。我有一个包含自定义数据的帐户:

{
  "favoriteThings": [
    {
      "thing": "raindrops",
      "location": "on roses"
    },
    {
      "thing": "whiskers",
      "location": "on kittens"
    },
    {
      "thing": "snowflakes",
      "location": "on my nose and eye lashes"
    }
  ],
  "favoriteColors": [
    "blue",
    "grey"
  ]
}

以下查询将产生以下结果:

  • customData.favoriteColors=blue将包括此帐户。
  • customData.favoriteColors\[1\]=blue包括此帐户,因为blue它不在索引 1 处。
  • customData.favoriteThings\[*\].thing=whiskers将包括此帐户
  • customData.favoriteThings\[*\].thing=ponies不会包含此帐户,因为它没有将小马列为他最喜欢的东西之一,但可能会包含具有相同结构的自定义数据的其他帐户。
  • customData.favoriteThings.thing=whiskers不会包含此帐户或具有相同自定义数据结构的任何其他帐户,因为在这种情况下,Stormpath 将寻找单个嵌套 JSONfavoriteThings对象,而不是数组。
于 2016-12-08T00:59:38.557 回答