Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何使用Gremlin Cosmos DB过滤相关对象?_.net_Gremlin_Azure Cosmosdb Gremlinapi_Gremlinnet - Fatal编程技术网

.net 如何使用Gremlin Cosmos DB过滤相关对象?

.net 如何使用Gremlin Cosmos DB过滤相关对象?,.net,gremlin,azure-cosmosdb-gremlinapi,gremlinnet,.net,Gremlin,Azure Cosmosdb Gremlinapi,Gremlinnet,我想获得一个对象的结果集,该结果集由一个用户和一个与该用户不相关的所有用户的列表组成。 结果应该如下所示: [[user: [USEROBJECT], usersThatAreNotFriends: [[USEROBJECT]...]]...] 我正在使用Cosmos DB Gremlin端点,努力过滤/合并已经相关的用户和所有用户 我的想法是: g.V().hasLabel('user').as('user').flatMap(g.V().hasLabel('user').where(__.

我想获得一个对象的结果集,该结果集由一个用户和一个与该用户不相关的所有用户的列表组成。 结果应该如下所示:

[[user: [USEROBJECT], usersThatAreNotFriends: [[USEROBJECT]...]]...]
我正在使用Cosmos DB Gremlin端点,努力过滤/合并已经相关的用户和所有用户

我的想法是:

g.V().hasLabel('user').as('user').flatMap(g.V().hasLabel('user').where(__.eq(select('user').out('isFriend')).fold()).as('usersThatAreNotFriends').select('user', 'usersThatAreNotFriends')
要设置我的示例,请使用:

g.addV('user').property('id','user_1').property('partition_key','1')
g.addV('user').property('id','user_2').property('partition_key','2')
g.addV('user').property('id','user_3').property('partition_key','3')
g.addV('user').property('id','user_4').property('partition_key','4')
g.V('user_1').addE('has_relation').to(g.V('user_2'))
g.V('user_2').addE('has_relation').to(g.V('user_1'))
g.V('user_2').addE('has_relation').to(g.V('user_4'))
g.V('user_4').addE('has_relation').to(g.V('user_2'))
预期结果应以简单的方式表示:

[user_1: [user_3, user_4], user_2:[user_3], 
user_3:[user_1, user_2, user_3], user_4:[user_1, user_3]]

我修改了您的查询,将ID添加为真实ID

g.addV('user').property(id,'user_1').property('partition_key','1')
g.addV('user').property(id,'user_2').property('partition_key','2')
g.addV('user').property(id,'user_3').property('partition_key','3')
g.addV('user').property(id,'user_4').property('partition_key','4')
g.V('user_1').addE('has_relation').to(g.V('user_2'))
g.V('user_2').addE('has_relation').to(g.V('user_1'))
g.V('user_2').addE('has_relation').to(g.V('user_4'))
g.V('user_4').addE('has_relation').to(g.V('user_2'))   
在您的示例中,有时结果中显示的是同一个人,因此我建议使用两种不同的查询。第一类包括与自己不是朋友的人

gremlin> g.V().as('p').
......1>    project('person','not-friends').
......2>      by().
......3>      by(V().where(__.not(__.in('has_relation').as('p'))).fold())
==>[person:v[user_3],not-friends:[v[user_3],v[user_2],v[user_1],v[user_4]]]
==>[person:v[user_2],not-friends:[v[user_3],v[user_2]]]
==>[person:v[user_1],not-friends:[v[user_3],v[user_1],v[user_4]]]
==>[person:v[user_4],not-friends:[v[user_3],v[user_1],v[user_4]]] 
如果您希望避免此人在结果中显示为自己不是朋友,可以执行以下操作:

gremlin>  g.V().as('p').
......1>    project('person','not-friends').
......2>      by().
......3>     by(V().where(__.not(__.in('has_relation').as('p')).where(neq('p'))).fold())
==>[person:v[user_3],not-friends:[v[user_2],v[user_1],v[user_4]]]
==>[person:v[user_2],not-friends:[v[user_3]]]
==>[person:v[user_1],not-friends:[v[user_3],v[user_4]]]
==>[person:v[user_4],not-friends:[v[user_3],v[user_1]]]
作为一个旁注,要找到谁是朋友,你可以使用一个简单的
group().by()
方法

gremlin> g.V().aggregate('all').group().by().by(out().fold()).unfold()
==>v[user_3]=[]
==>v[user_2]=[v[user_1], v[user_4]]
==>v[user_1]=[v[user_2]]
==>v[user_4]=[v[user_2]]    

如果您可以添加一组小的
addV
addE
步骤来构建一个表示您的数据的示例图,这将非常有用。@KelvinLawrence我更新了我的问题。问题是,无法在Azure Cosmos DB中使用简单符号V:ExceptionType:GraphCompileException ExceptionMessage:Gremlin查询编译错误:无法在当前上下文中解析符号“V”。@第1行第56列。1个错误来源:Microsoft.Azure.Cosmos.Gremlin.Core GremlinRequestId:a69f7871-2ae5-4645-91f0-0cb7af165601上下文:graphcompute作用域:graphparse translate validatesymbolresolution GraphEntropStatusCode:QuerySyntaxError HResult:0x80131500类型:帮助“或”:h获取帮助。确定,使用中间遍历
V()。我添加了一种只使用一组的方法来问反问题。也许可以使用它,然后在应用程序中完成其余部分。如果时间允许,我将尝试添加一个替代表格。非常感谢您的快速回答。希望Cosmos DB很快能更好地支持整个Gremlin API。。。