Как я могу узнать, была ли сброшена вершина в Гремлин? - PullRequest
0 голосов
/ 12 февраля 2019

Я хочу попытаться удалить вершину, и я хочу знать, если я что-то удалил.Если я сделаю

g.V().has('name', 'deleteme').drop()

, я не смогу узнать, была ли для начала вершина.Я всегда получаю пустой результат.Есть ли способ сказать?

Я подумал, что могу пометить удаленные данные и затем выбрать их

g.V().has('name', 'deleteme').as('deleted').drop().select('deleted')

, но это дает мне ошибку

Failed to execute query: g.V().has('name', 'deleteme').as('deleted').drop().select('deleted'): Script eval error: ActivityId : 959af7a4-b955-4127-be46-2dc160dd4ece ExceptionType : GraphCompileException ExceptionMessage : Gremlin Query Compilation Error: Column reference R_0["_value"] cannot be located in the raw records in the current execution pipeline. Source : Microsoft.Azure.Graphs GremlinRequestId : 959af7a4-b955-4127-be46-2dc160dd4ece Context : graphcompute Scope : graphstg-phyplan GraphInterOpStatusCode : QuerySyntaxError HResult : 0x80131500

Есть ли рекомендуемый способ добиться этого?

(я использую C # SDK для Azure CosmosDB, если это имеет значение)

1 Ответ

0 голосов
/ 12 февраля 2019

Шаг drop() фактически является побочным эффектом и шагом фильтра.Это побочный эффект в том, что он мутирует базы данных и побочный эффект, потому что он просто убивает все траверсеры в потоке.Если исключить исключение, можно с уверенностью предположить, что данные были удалены (если они существовали в первую очередь - но, возможно, это то, что вы хотите знать).

На примере современного игрушечного графа я думаю, что самый простой способ сделать это с шагом sideEffect(), который фактически заставляет drop() вести себя только как побочный эффект:

gremlin> g.V().has('person','name','marko').sideEffect(drop()).constant('gone')
==>gone
gremlin> g.V().has('person','name','marko').sideEffect(drop()).constant('gone')
gremlin>

но я не уверен, что CosmosDB поддерживает этот шаг.Я полагаю, что вы могли бы сделать это менее интуитивно понятным и читабельным, но, кажется, выполняет то же самое:

gremlin> g.V().has('person','name','marko').union(constant('gone'),drop())
==>gone
gremlin> g.V().has('person','name','marko').union(constant('gone'),drop())
gremlin>
...