2016-04-12 5 views
3

Wenn ich den Wert einer Eigenschaft wie folgt überprüfen: g.V().hasLabel('appUser').has('myId','1234').values('isPrivate') ==>false prüfen Vertex Eigenschaft equivalency in Gremlin/TitanDB

Aber wenn ich überprüfen, ob dieser Wert false innerhalb eines if, kehrt nicht, was ich erwarten würde : if(g.V().hasLabel('appUser').has('myId','1234').values('isPrivate') == 'false'){'is false'}else{'is true'} ==>is true

Und diese zurückkehrt auch nicht, was ich erwarten würde: if(!g.V().hasLabel('appUser').has('myId','1234').values('isPrivate')){'is false'}else{'is true'} ==>is true

Wie soll ich dieses Update eine bedingte Prüfung durchführen?

Antwort

2

.values() gibt eine Traversal zurück, die eine Iterable (see TinkerPop 3.1.1 JavaDoc) ist. Sie müssen .next() aufrufen, um den Eigenschaftswert tatsächlich abzurufen.

Die angegebene Abfrage kann so geschrieben werden.

if(!g.V().hasLabel('appUser').has('myId','1234').values('isPrivate').next()){'is false'}else{'is true'} 

Hinweis der Aufruf von .next() direkt nach .values('isPrivate').

Bei der Verwendung der Gremlin Console werden Traversal Objekte automatisch iteriert (.iterate()), was magisch nicht aussieht. Mid-Script (oder außerhalb der Gremlin Console), müssen Sie .next() oder .iterate() das Traversal selbst ausführen, ob dieses Traversal Elemente abrufen soll (wie der aktuelle Anwendungsfall) oder den Graph mutieren soll.

+0

Gah, hätte wissen müssen. Ich lerne immernoch! Vielen Dank. – Fook