2017-08-10 49 views
2

我是gremlin的新手,并试图了解如何使用Azure Cosmos DB与GraphSON在同一结果中获取文章以及作者和附件。在tinkerpop3中输出相同查询中的顶点和相邻顶点

My图表看起来是这样的:

[User] <- (edge: author) - [Article] - (edge: attachments) -> [File1, File2] 

我想取我需要的一切在UI显示与作者和有关要求的附件信息一起的文章。

我试图获取与此类似伪代码的东西:

{ 
article: {...}, 
author: [{author1}], 
attachment: [{file1}, {file2}] 
} 

我试图至今:

g.V().hasLabel('article').as('article').out('author', 'attachments').as('author','attachments').select('article', 'author', 'attachments') 

我怎样才能编写查询,以获得不同的值?

+0

正如您所提到的,您正在尝试获取与给定的伪代码类似的内容。所以你需要结果完全相同的格式,或者你希望结果只是4个对象,包括文章,作者,文件1,文件2(不同的值)? –

回答

4

当问小鬼总是有帮助的,以这样的形式提供了一些样本数据的问题:

g.addV('user').property('name','jim').as('jim'). 
    addV('user').property('name','alice').as('alice'). 
    addV('user').property('name','bill').as('bill'). 
    addV('article').property('title','Gremlin for Beginners').as('article'). 
    addV('file').property('file','/files/a.png').as('a'). 
    addV('file').property('file','/files/b.png').as('b'). 
    addE('authoredBy').from('article').to('jim'). 
    addE('authoredBy').from('article').to('alice'). 
    addE('authoredBy').from('article').to('bill'). 
    addE('attaches').from('article').to('a'). 
    addE('attaches').from('article').to('b').iterate() 

请注意,我修改您的边缘标签名称更动词等,以使他们脱颖而出更好地使用名词式顶点标签。它往往与边缘的方向很好读,如:article --authoredBy-> user

无论如何,你的问题是最容易与project() step解决:

gremlin> g.V().has('article','title','Gremlin for Beginners'). 
......1> project('article','authors','attachments'). 
......2>  by(). 
......3>  by(out('authoredBy').fold()). 
......4>  by(out('attaches').fold()) 
==>[article:v[6],authors:[v[0],v[2],v[4]],attachments:[v[10],v[8]]] 

在上面的代码中,注意内使用fold()by()步骤 - 这将强制内部遍历的全部迭代并将其置于列表中。如果你错过了这一步,你只会得到一个结果(即第一个结果)。

更进一步,我添加了valueMap()并next'd结果,以便您可以更好地查看上面顶点中包含的属性。

gremlin> g.V().has('article','title','Gremlin for Beginners'). 
......1> project('article','authors','attachments'). 
......2>  by(valueMap()). 
......3>  by(out('authoredBy').valueMap().fold()). 
......4>  by(out('attaches').valueMap().fold()).next() 
==>article={title=[Gremlin for Beginners]} 
==>authors=[{name=[jim]}, {name=[alice]}, {name=[bill]}] 
==>attachments=[{file=[/files/b.png]}, {file=[/files/a.png]}] 
+0

非常感谢您花时间解释和发表评论。也感谢您指出如何提供示例。 :) –

相关问题