我有两个节点用户和资源。它们之间的关系是:
User -> :HAS -> Resources
User -> :favourite -> Resources
我希望获得用户拥有的资源,并且订购那些也是最喜欢的资源。简而言之,我希望将最喜欢的资源放在用户拥有的所有其他资源之上。我该怎么办?
答案 0 :(得分:4)
您可以匹配这两种类型,然后按计数排序。因此,与资源具有HAS
和FAVOURITE
关系的用户在该资源上的计数为2,在与其仅具有HAS
关系的资源上的计数为1。
MATCH (user:User)-[rel:HAS|FAVOURITE]->(resource:Resource)
WHERE user.name = "some user"
WITH user, resource, COUNT(rel) AS rels
ORDER BY rels DESC
RETURN user.name, resource.name;
这取决于模型中的冗余。我假设为了让用户喜欢一个资源,他们也必须“拥有”它。
答案 1 :(得分:0)
妮可已经给出了一个很好的答案(+1),但如果你有案例
如果您明确指出[:HAS]
上的匹配并依靠[:FAVOURITE]
MATCH (user:User { name:"Peter" })-[:HAS]->(resource)
RETURN user.name, resource.name, LENGTH(user-[:FAVOURITE]->resource) AS favFactor
ORDER BY favFactor DESC
如果用户有两次资源,则会返回两次,但由于有两个匹配的关系,它不会被视为收藏。用户根本没有匹配的收藏夹。