集合管理函数

表达式语言还为查询集合引入了一组功能。

下面对这些功能进行了说明。 在以下示例中,让我们使用包含集合的事件有效负荷:

                { 
   "_experience":{ 
      "campaign":{ 
         "message":{ 
            "profile":{ 
               "pushNotificationTokens":[ 
                  { 
                     "token":"token_1",
                     "application":{ 
                        "_id":"APP1",
                        "name":"MarltonMobileApp",
                        "version":"1.0"
                     }
                  },
                  { 
                     "token":"token_2",
                     "application":{ 
                        "_id":"APP2",
                        "name":"MarketplaceApp",
                        "version":"1.0"
                     }
                  },
                  { 
                     "token":"token_3",
                     "application":{ 
                        "_id":"APP3",
                        "name":"VendorApp",
                        "version":"2.0"
                     }
                  }
               ]
            }
         }
      }
   },
   "timestamp":"1536160728"
}

函数“all(<condition>)”

all​函数使用布尔表达式启用给定集合上的过滤器的定义。

<listExpression>.all(<condition>)

例如,在所有应用程序用户中,您可以使用IOS 13(布尔表达式"app used == IOS 13")获取这些用户。 此函数的结果是筛选列表,其中包含与布尔表达式匹配的项(例如:app用户1、app用户34、app用户432)。

在“数据源条件”活动中,可以检查​all​函数的结果是否为null。 您还可以将此​all​函数与其他函数(如​count)结合使用。 有关详细信息,请参阅数据源条件活动

示例1:

我们希望检查用户是否已安装特定版本的应用程序。 为此,我们获取与版本为1.0的移动应用程序关联的所有推送通知令牌。然后,我们使用​count​函数执行一个条件,检查返回的令牌列表是否包含至少一个元素。

count(@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.all(currentEventField.application.version == "1.0").token}) > 0

结果是真的。

示例 2:

在此,我们使用​count​函数检查集合中是否包含推送通知令牌。

count(@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.all().token}) > 0

结果将是真的。

注意

当​all()​函数中的过滤条件为空时,过滤器将返回列表中的所有元素。 但是,为了计算集合的元素数,不需要全部函数。

count(@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.token})

表达式结果为​3

示例3:

在此,我们检查个人在过去24小时内是否未收到任何通信。 我们使用两个基于两个元素的表达式来过滤从ExperiencePlatform数据源检索到的体验事件集合。 特别是,将事件的时间戳与​nowWithDelta​函数返回的dateTime进行比较。

count(#{ExperiencePlatform.MarltonExperience.experienceevent.all(
   currentDataPackField.directMarketing.sends.value > 0 and
   currentDataPackField.timestamp > nowWithDelta(-1, "days")).timestamp}) == 0

如果没有与这两个条件匹配的体验事件,则结果为true。

示例4:

在此,我们要检查个人是否在过去7天内至少启动了一次应用程序,例如,触发推送通知,邀请他开始教程。

count(
 #{ExperiencePlatform.AnalyticsData.experienceevent.all(
 nowWithDelta(-7,"days") <= currentDataPackField.timestamp
 and currentDataPackField.application.firstLaunches.value > 0
)._id}) > 0
注意

currentEventField 仅在操作事件集合和currentDataPackField时 可用
操作数据源集合时。 当使用​allfirst​和​last​处理集合时,我们
逐个循环访问集合的每个元素。 currentEventFieldcurrentDataPackField
与要循环的元素相对应。

函数"first(<condition>)"和"last(<condition>)"

first​和​last​函数还在返回满足筛选器的列表的第一个/最后一个元素时启用对集合中的筛选器的定义。

<listExpression>.first(<condition>)

<listExpression>.last(<condition>)

示例1:

此表达式返回与版本为1.0的移动应用程序关联的第一个推送通知令牌。

@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.first(currentEventField.application.version == "1.0").token

结果为“token_1”。

示例 2:

此表达式返回与版本为1.0的移动应用程序关联的最后一个推送通知令牌。

@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.last&#8203;(currentEventField.application.version == "1.0").token}

结果为“token_2”。

注意

体验事件从Adobe Experience Platform中以收藏的形式按时间倒序检索,因此:

  • first 函数将返回最近的事件
  • last 函数将返回最旧的函数。

示例3:

我们检查DMA ID值为非零的第一个(最新的)Adobe Analytics事件的值是否等于602。

#{ExperiencePlatform.AnalyticsProd_EvarsProps.experienceevent.first(
currentDataPackField.placeContext.geo.dmaID > 0).placeContext.geo.dmaID} == 602

函数"at(<index>)"

at​函数允许您根据索引引用集合中的特定元素。
索引0是集合的第一个索引。

<listExpression>.at(<index>)

示例:

此表达式返回列表的第二个推送通知令牌。

@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.at(1).token}

结果为“token_2”。

On this page

Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Summit Banner

A virtual event April 27-28.

Expand your skills and get inspired.

Register for free
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now
Adobe Maker Awards Banner

Time to shine!

Apply now for the 2021 Adobe Experience Maker Awards.

Apply now