コレクション管理関数 collection-management-functions
また、式言語にも、コレクションをクエリするための一連の関数が導入されています。
これらの関数について以下で説明します。次の例では、コレクションを含んだイベントペイロードを使用します。
{
"_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」)。この関数の結果は、ブール式に一致する項目(例:アプリユーザー 1、アプリユーザー 34、アプリユーザー 432)を含んだフィルター済みリストになります。
「データソースの条件」アクティビティでは、all 関数の結果が null かどうかを確認できます。また、この all 関数を、count 関数などの他の関数と組み合わせることができます。詳しくは、「データソースの条件」アクティビティを参照してください。
例 1:
ユーザーが特定のバージョンのアプリケーションをインストールしてあるかどうかを確認します。この目的のために、バージョンが 1.0 のモバイルアプリケーションに関連付けられたすべてのプッシュ通知トークンを取得します。その後、count 関数で条件分けをして、返されたトークンリストに少なくとも 1 つの要素が含まれているかどうかを確認します。
count(@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.all(currentEventField.application.version == "1.0").token}) > 0
結果は true です。
例 2:
ここでは、 count 関数を使用して、コレクションにプッシュ通知トークンがあるかどうかを確認します。
count(@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.all().token}) > 0
結果は true になります。
count(@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.token})
式の結果は 3 です。
例 3:
ここでは、個人が過去 24 時間以内に連絡を受け取っていないかどうかを確認します。ExperiencePlatform データソースから取得したエクスペリエンスイベントのコレクションを、コレクションの 2 つの要素に基づく 2 つの式を使用してフィルタリングします。特に、イベントのタイムスタンプを、nowWithDelta 関数から返される日時と比較します。
count(#{ExperiencePlatform.MarltonExperience.experienceevent.all(
currentDataPackField.directMarketing.sends.value > 0 and
currentDataPackField.timestamp > nowWithDelta(-1, "days")).timestamp}) == 0
2 つの条件に一致するエクスペリエンスイベントがない場合、結果は true になります。
例 4:
ここでは、個人が過去 7 日間に少なくとも 1 回アプリケーションを起動したかどうかを確認します。例えば、チュートリアルを開始するよう招待するプッシュ通知をトリガーするためです。
count(
#{ExperiencePlatform.AnalyticsData.experienceevent.all(
nowWithDelta(-7,"days") <= currentDataPackField.timestamp
and currentDataPackField.application.firstLaunches.value > 0
)._id}) > 0
データソースコレクションの操作時にのみ使用できます。all、first および last を使用してコレクションを処理する場合は、
コレクションの各要素を 1 つずつループ処理します。currentEventField と currentDataPackField は、
ループ処理する要素に対応します。
関数「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​(currentEventField.application.version == "1.0").token}
結果は「token_2」です。
- 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>
)
例:
この式は、リストの 2 番目のプッシュ通知トークンを返します。
@{LobbyBeacon._experience.campaign.message.profile.pushNotificationTokens.at(1).token}
結果は「token_2」です。
その他の例
#{ExperiencePlatform.ExperienceEventFieldGroup.experienceevent. all(currentDataPackField._aepgdcdevenablement2.purchase_event.receipt_nbr == "10-337-4016").
_aepgdcdevenablement2.purchase_event.productListItems. all(currentDataPackField.SKU == "AB17 1234 1775 19DT B4DR 8HDK 762").name}
#{ExperiencePlatform.ExperienceEventFieldGroup.experienceevent.last(
currentDataPackField.eventType == "commerce.productListAdds").productListItems.last(currentDataPackField.priceTotal >= 150).name}