Docs 菜单
Docs 主页
/
Atlas 图表
/ /

筛选嵌入式图表

在此页面上

  • 指定可筛选字段
  • 为具有嵌入式文档的字段指定可筛选子字段
  • 对 iframe 中嵌入的Charts数据进行预筛选
  • 预过滤器示例
  • 在 iframe 中嵌入的 Charts 上筛选数据
  • 过滤器语法
  • 对通过 SDK 嵌入的Charts上的数据进行预筛选
  • 在使用 SDK 嵌入的 Charts 上筛选数据
  • 注入特定于用户的筛选器

您可以通过添加以下内容来自定义嵌入式图表:

  • 预过滤器。 将 preFilter选项与Charts Embedding SDK 结合使用,或将各种查询参数附加到 iframe URL。

  • 筛选器。 将filter选项与Charts Embedding SDK 结合使用,或将各种查询参数附加到 iframe URL。

您可以在同一仪表盘同时使用预筛选器和筛选器,尽管它们是可选项。 如果指定,预筛选器将始终在图表视图之后、仪表盘的查询和筛选器之前运行。

注意

要嵌入仪表盘中的图表,您必须在数据源上配置嵌入选项。 有关说明,请参阅:

  • 将图表嵌入到 Web 应用程序中

您可以筛选嵌入式Atlas Charts和嵌入式仪表盘上的Atlas Charts。

图表作者指定可包含在由嵌入式应用程序代码设立或由图表查看器添加的预筛选器和筛选器中的字段。 图表作者可以通过仅允许对某些字段进行预筛选或筛选来限制对数据的访问权限。 默认,不允许任何字段,这意味着在您明确允许至少一个字段之前,无法对图表进行预过滤或过滤。

要为预筛选器和筛选器定义可筛选字段,请执行以下操作:

  1. 导航到包含要在其中定义可筛选字段的图表的仪表盘

  2. 对于所需的图表,请单击按钮,然后从下拉菜单中选择 Embed Chart

  3. Allowed filter fields部分,使用下拉列表选择图表查看器可以使用哪些字段筛选图表中的数据。 您还可以手动键入值以添加下拉列表中未列出的字段。

    注意

    仅当您已启用“未验证”或“已验证”嵌入访问权限时,才会显示此选项。

    要指定图表查看器可以预筛选或过滤数据的字段,您可以:

    • 使用下拉列表选择字段。

    • 手动键入值以添加下拉列表中未列出的字段。

    • 选择 Allow all fields in the data source used in this chart

  4. 选择所有所需字段后,单击下拉列表下方的Save

图表查看器和呈现图表的应用程序现在可以使用预筛选器和基于指定字段的筛选器来显示原始图表数据的子集。 如果查看器尝试对未包含在允许的过滤字段列表中的字段使用过滤器, Atlas Charts将返回错误。

当您将字段添加到值为嵌入式文档的Allowed filter fields列表时,您还必须指定要允许的每个单独的子字段。

例子

请考虑以下文档:

{
"name": "Alice",
"favorites" :
{
"color": "green",
"animal": "turtle",
"season": "autumn"
}
}

如果您仅将favorites字段添加到允许字段列表中,则不会授予查看器根据favorites的任何子字段进行筛选的权限。 相反,您可以通过指定favorites.colorfavorites.animalfavorites.season ,将一个或多个子字段单独添加到列表中。

对包含大量集合的嵌入式图表和仪表盘使用预筛选器。 预筛选器在嵌入式图表管道的早期阶段运行,允许您执行以下操作:

  • 及早筛选数据,以减少查询运行时间。

  • 在执行包含聚合的图表查询的查询之前应用筛选器。

预过滤器的行为与过滤器完全相同,并使用相同的语法。 它们唯一的区别在于,它们在图表视图之后、图表查询和筛选器开始之前运行。 要学习;了解有关管道段顺序的更多信息,请参阅聚合管道。

在图表查询开始运行之前,使用preFilter查询参数过滤嵌入 iframe 中的图表的数据。

您可以指定 MQL 文档作为preFilter查询参数,前提是筛选器中使用的字段位于允许的可筛选字段列表中。

以下示例说明了图表视图、查询栏中的查询、筛选器和预筛选器如何协同工作。

考虑以下情况:

  • Charts视图包含:

    [ { $project: { accommodates: 1, "bedrooms": 1, "address.country": 1 } } ]
  • 查询栏包含:

    [ { $match: { accommodates: { $gte: 3 } } }, { $project: { address: 0 } } ]
  • 嵌入式图表中的过滤包含:

    { "bedrooms": { $lte: 3 } }
  • 嵌入式图表中的预筛选器包含:

    { "address.country": "Australia" }

在前面的示例中,在图表的查询开始运行之前,应用了预筛选器,仅查找澳大利亚的公寓。 之后,运行图表的查询,以确定所有容纳三人以上的公寓。

使用filter查询参数,仅显示与 iframe 嵌入图表中指定的 MQL筛选器匹配的数据。

您可以在UnauthenticatedVerified SignatureAtlas Charts上使用filter查询参数。筛选行为因身份验证设置而异:

  • 对于未经身份验证的图表,图表作者会指定可包含在由嵌入式应用程序代码设立或由图表查看器添加的筛选器中的字段。 要学习;了解如何指定可筛选字段,请参阅指定可筛选字段。

  • 对于需要验证签名的Atlas Charts,可以筛选所有文档字段,但您必须在服务器端代码中生成筛选器,并将筛选器作为签名有效负载的一部分包含在内。

选择相应的标签页,查看如何在Unauthenticated图表和Verified Signature图表中筛选数据的示例:

您可以指定 MQL 文档作为filter查询参数,前提是筛选器中使用的字段位于允许的可筛选字段列表中。

您的筛选器必须与$match查询中使用的格式匹配,并且可以是:

  • 顶级查询

    例子

    { "quantity": { $gte: 20 } }
  • 或者在布尔表达式中( $and$nor$or)

    例子

    { $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }

注意

您必须对筛选器参数的特殊字符进行 URL 编码。

以下 iframe src URL 呈现一个图表,该图表仅显示imdb.rating大于或等于8的文档:

https://charts.mongodb.com/charts-atlasproject1-piocy/embed/charts?
id=93584ddb-1115-4a12-afd9-5129e47bbb0d&
filter={"imdb.rating":%20{$gte:%208}}&
autoRefresh=60

该 URL 使用{"imdb.rating":%20{$gte:%208}}的编码filter参数。 解码后,该筛选器为:

{"imdb.rating": {$gte: 8}}

指定MQL文档作为您的filter查询参数。

您的过滤必须与$match查询中使用的格式匹配,如以下示例所示:

例子

{ "quantity": { $gte: 20 } }

例子

{ $or: [ { quantity: { $lt: 20 } }, { price: 10 } ] }

在“已验证签名”中使用筛选器时, MQL查询包含的字符必须在服务器端代码计算签名之前进行URL编码。 当Charts验证签名时,它会使用JavaScript describeURIComponent{ 再次对过滤进行URL编码 函数。您必须使用相同的编码算法对过滤进行编码。

重要

您必须将过滤中的空格编码为%20 ,而不是+或原始空格。

MQL要了解如何使用不同的服务器端编程语言正确编码 过滤,请参阅Atlas Charts 嵌入示例 在Github 上。

以下 iframe src URL 呈现一个图表,该图表仅显示imdb.rating大于或等于8的文档:

https://charts.mongodb.com/charts-atlasproject1-piocy/embed/charts?
id=93584ddb-1115-4a12-afd9-5129e47bbb0d&
timestamp=1564156636&
expires-in=300&
filter=%7B%22imdb.rating%22%3A%20%7B%24gte%3A%208%7D%7D&
autoRefresh=60&
signature=8e0d92b33934c928f6c6974e2f0102ace77f56d851cb0d33893e84c359ab1043

该 URL 使用%7B%22imdb.rating%22%3A%20%7B%24gte%3A%208%7D%7D的编码filter参数。 解码后,该筛选器为:

{"imdb.rating": {$gte: 8}}

您可以使用preFilter选项将预过滤器添加到嵌入式图表。 预筛选允许图表作者在图表视图之后、图表查询执行和图表筛选器之前运行过滤器。

Embed Chart模式中,您必须指定要包含在预筛选器中的字段。 Embed Chart模式包含允许筛选的字段下拉菜单。

以下使用preFilter选项仅表示澳大利亚的文档:

createChart({
baseUrl: '<your-base-url>',
chartId: '<your-chart-id>',
width: 500,
height: 500,
preFilter: { "address.country": "Australia" }
})

您可以使用filter选项向嵌入式图表添加过滤。 筛选允许图表作者仅显示嵌入式图表中与指定MQL过滤匹配的数据。

Embed Chart模式中,您必须指定要包含在过滤中的字段。 Embed Chart模式包含允许筛选的字段下拉菜单。

以下示例使用filter选项,仅表示total字段大于100的文档:

createChart({
baseUrl: '<your-base-url>',
chartId: '<your-chart-id>',
width: 500,
height: 500,
filter: { "total": { "$gt": 100 } }
})

当您嵌入需要Authenticated访问权限的图表时,可以使用Injected function设置注入特定于查看该图表的每个用户的 MongoDB 筛选器文档。 该函数可以通过context.token访问嵌入式身份验证提供者的令牌,并且可以根据该令牌筛选图表数据。

此筛选器可确保嵌入式Atlas Charts的查看者只能看到自己的数据,这在嵌入具有潜在敏感信息的Atlas Charts时非常有用。

注意

如果您使用Atlas App Services身份验证提供者,则context.token包含要过滤的App Services用户对象。 示例,如果您为App Services用户启用自定义用户数据,则用户对象在context.token.custom_data中可用。

要注入特定于每个用户的筛选器,请在Embed Chart对话框的Authenticated标签页中将Injected function设置为On 。 指定一个函数并单击Save

例子

以下筛选器函数仅呈现文档的ownerId字段与嵌入式身份验证提供程序的令牌的sub字段的值匹配的数据:

function getFilter(context) {
return { ownerId: context.token.sub };
}

后退

iframe