我想找到来自同一品牌但来自不同类别的商品。然后归还他们的身份证。
在我的数据库中,我目前有以下节点:项目、品牌、类别。
和关系:IN_CATEGORY,FROM_BRAND。
项目具有属性:ID、品牌和类别。
我创建了这个查询,它返回正确的结果
MATCH (i1:Item {Id:"5"})-[r1:FROM_BRAND]->(b:Brand)<-[r2:FROM_BRAND]-(i2:Item)
WHERE i1.category <> i2.category
RETURN i2.Id
我不知道是否可以避免使用类别属性,而是使用IN_CATEGORY关系。
我的问题是现在我想使用 Neo4j 图形客户端执行查询。
到现在为止,我走到了这一步:
public IEnumerable<string> GetIds(string itemId){
var query = _client.Cypher
.Match("(i1: Item)-[r:FROM_BRAND]->(b:Brand)<-[rr:FROM_BRAND]-(i2:Item)")
.Where((Item i1) => i1.id == itemId)
.AndWhere((Item i1, Item i2) => v1.category != i2.category)
.Return(i2 => i2.As<Item>());
return query.Results;
}
它似乎返回了正确的项目。但我想返回项目 ID,而不是整个项目。
我使用 WITH 修复了它
var query = _client.Cypher
.Match("(i1: Item)-[r:FROM_BRAND]->(b:Brand)<-[rr:FROM_BRAND]-(i2:Item)")
.Where((Item i1) => i1.id == itemId)
.AndWhere((Item i1, Item i2) => i1.category != i2.category)
.With("i2.id AS iId")
.Return(iId => iId.As<string>());
return query.Results;