簡體   English   中英

Gremlin 查詢以計算沒有特定邊的頂點

[英]Gremlin query to count vertices without a certain edge

我在 AWS 中有一個 Neptune 數據庫,其圖表如下:

圖形

所以有一個用戶組織了一個聚會並創建了兩個邀請。 但是用戶已經撤回了其中一個邀請。

我正在尋找一個查詢來計算尚未撤回的邀請數量(在上述情況下為 1)。

我找到了獲得邀請的方法(我正在使用Gremlin package for Javascript ):

const result = await g
        .V("user#123")
        .inE().hasLabel("createdBy")
        .otherV()
        .toList();

但我似乎找不到任何東西來過濾那些已撤回的邀請。 我不認為我可以遍歷未withdrawnBy的邊,因為那仍會返回 2(因為我們有一個createdBy和一個withdrawnBy的邊)。

有人有任何指示嗎? 我找到了這個答案,它建議:

gremlin> g.V.filter{!it.bothE('knows').hasNext()}

我假設這是 Groovy,但我使用的是 Javascript(實際上是打字稿)。 我試過.filter() function,但這似乎引發了錯誤:

.filter(function(this: any) {
    return !this.bothE("isRevokedBy");
})

你可以這樣做:

g.V("user#123").as('u').
  in('createdBy').
  not(where(out('withdrawnBy').as('u')))

例如: https://gremlify.com/crjfj88qrtfd8

但我認為最好在createdBy邊緣上添加一個屬性,表明它已被撤銷,而不是在它們之間添加另一個邊緣。

像這樣:

g.V("user#123").
  inE('createdBy').not(has('withdrawn', true)).outV()

例如: https://gremlify.com/csfdv6w7325mb

當您使用 JavaScript package 時,這是可以工作的代碼:

const gremlin = require("gremlin");
const __ = gremlin.process.statics;
const traversal = gremlin.process.AnonymousTraversalSource.traversal;
const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const dc = new DriverRemoteConnection("ws://localhost:8182/gremlin");
const g = traversal().withRemote(dc);

const result = await g
    .V("user#123")
    .in_("createdBy")
    .where(__.not(__.out("withdrawnBy")))
    .toList()

暫無
暫無

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

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