数组内的自定义数据搜索
Custom data search within an array
是否可以搜索帐户的自定义数据以查找数组中包含的值?
类似于:
?customData.[arrayName].{key}=value
Stormpath docs没有提到数组搜索。
是的,使用 Stormpath 完全可以搜索自定义数据,即使值存储为数组!
请注意,字段名称是简单的名称,值是不同的数据类型,如数组、映射、字符串等...因此查询并不像人们想象的那么复杂:-)
例如,如果我想存储名为 favoriteColors
的自定义数据,它是一个类似于
的数组
"favoriteColors": [ "red", "black", "blue", "white" ]
请注意,该字段名称与任何其他字段名称一样。值为数组。
要在 favoriteColors
数组中搜索具有值 red
的帐户,您只需要正常的查询语法:
?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
此查询将匹配 favoriteColors
数组中包含 red
的帐户。如果我将查询更改为 ?customData.favoriteColors=yellow
它将不匹配,除非 yellow
也被添加到数组中。
在数组中搜索自定义数据绝对可以做到。语法是:customData.{fieldName}\[{index}\]=value
其中 {index}
可以是您要查找的特定索引,或者 *
如果您想在数组中的任何位置找到它。 (请注意 []
字符使用反斜杠进行转义,否则查询解释器会将其与范围查询混淆。)
如果完全不使用索引,则隐含 \[*\]
。更准确地说,Stormpath 将检查 fieldName
或 中的值作为 [=16] 数组中的元素=].但是,语法糖仅在数组字段是搜索中的最后一个元素时才起作用。由于您几乎可以将任何 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 将寻找单个嵌套的 JSON favoriteThings
对象,不是数组。
是否可以搜索帐户的自定义数据以查找数组中包含的值?
类似于:
?customData.[arrayName].{key}=value
Stormpath docs没有提到数组搜索。
是的,使用 Stormpath 完全可以搜索自定义数据,即使值存储为数组!
请注意,字段名称是简单的名称,值是不同的数据类型,如数组、映射、字符串等...因此查询并不像人们想象的那么复杂:-)
例如,如果我想存储名为 favoriteColors
的自定义数据,它是一个类似于
"favoriteColors": [ "red", "black", "blue", "white" ]
请注意,该字段名称与任何其他字段名称一样。值为数组。
要在 favoriteColors
数组中搜索具有值 red
的帐户,您只需要正常的查询语法:
?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
此查询将匹配 favoriteColors
数组中包含 red
的帐户。如果我将查询更改为 ?customData.favoriteColors=yellow
它将不匹配,除非 yellow
也被添加到数组中。
在数组中搜索自定义数据绝对可以做到。语法是:customData.{fieldName}\[{index}\]=value
其中 {index}
可以是您要查找的特定索引,或者 *
如果您想在数组中的任何位置找到它。 (请注意 []
字符使用反斜杠进行转义,否则查询解释器会将其与范围查询混淆。)
如果完全不使用索引,则隐含 \[*\]
。更准确地说,Stormpath 将检查 fieldName
或 中的值作为 [=16] 数组中的元素=].但是,语法糖仅在数组字段是搜索中的最后一个元素时才起作用。由于您几乎可以将任何 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
对象,不是数组。