簡體   English   中英

Gremlin - 如何使用一次遍歷的折疊列表結果作為 inside 語句的操作數

[英]Gremlin - How to use the folded List Result of one traversal as the operand of a within statement

我目前正在處理一個查詢,該查詢為用戶提取查看的產品列表,然后提取在訂單中購買的產品列表。 我想根據訂單購買的產品列表過濾查看的產品列表,結果是查看了 n 次但未在訂單中購買的產品列表。

注意我的最后一個子句——如果我用逗號分隔的字符串進行測試,它會起作用。

g.V('84c0cb6c-6dd4-e2bd-a3f3-1a769637636e').store('User')
    .sideEffect(
        outE('TRIGGERS')
        .inV().as('UserSessions')
        .outE('VIEWS')
        .inV().as('UserWebpagesViewed')
        .outE('CONTAINS')
        .inV()
        .groupCount()
        .unfold()
        .where(
            select(values)
           .is(gte(2))
        )
        .select(keys)
        .store('UserMappedProducts')
    )
    .filter(inE('REFERS_TO').outV().inE('INSTANCE_OF').outV().outE('MAKES').inV())
    .sideEffect(
        inE('REFERS_TO')
        .outV()
        .inE('INSTANCE_OF')
        .outV()
        .outE('MAKES')
        .inV()
        .inE('PURCHASED_WITHIN')
        .outV()
        .id()
        .fold()
        .store('UserPurchasedProducts')
    )
    .select('UserMappedProducts')
    .unfold()
    .has(id, within(select('UserMappedProducts').unfold()))

添加到上面的評論中,截至今天,Gremlin 不允許在諸如within的謂詞內進行遍歷(例如select )。 您可以使用where .... by表達式來解決這些類型的限制。 在 TinkerPop 社區中,我們有興趣將此功能添加到 Gremlin 語言中。

有一種特殊情況,如果它的形式是where where(somepredicate(somelabel))

在您的特定情況下,您必須執行以下操作:

.as('x').where(within('x')).by(id).by(select('UserMappedProducts'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM