我有一个neo4j查询,它获取所有第一学位和(用户)的2度连接,然后取得他们作为所有者或室友的位置。 我通过CASE子句收集用户之间类似关系的所有地方和一些其他信息。但问题是CASE子句执行时间超过20秒 查询,这真的很糟糕。
export default {
data: function() {
return {
users: usersRef,
user: {
name: '',
email: '',
},
users: [{
name: 'John Doe',
email: 'john.doe@gmail.com',
uid: "should be actual User UID",
}],
};
},
methods: {
signUp: function() {
firebaseApp.auth().createUserWithEmailAndPassword(email.value, password.value).then(function(user) {
}, function(error) {
alert(error.message + error.code);
});
有没有有效的方法来恢复用户之间的连接?
答案 0 :(得分:0)
这应该更有效率,因为它使用OPTIONAL MATCH
执行(n)-[:connected_to*1..2 {status: 1}]-(u)
一次搜索(而不是在CASE
子句中执行非常类似的搜索,最多两次)。
MATCH (n:user)-[:connected_to*..2 {status: 1}]-(:User)<-[:owner_of|house_mate]-(place:Place)
WHERE ID(n) = {ID_n} AND NOT(n)<-[:owner_of|house_mate]-(place)
MATCH (place)-[tenant:owner_of|house_mate]->(u:User)
OPTIONAL MATCH (n)-[ct:connected_to*..2 {status: 1}]-(u)
WITH place,
collect({
type: type(tenant),
u: u,
connection: CASE SIZE(ct)
WHEN 1 THEN '1'
WHEN 2 THEN '2'
ELSE '3'
END}) AS tenants
RETURN place,
[t IN tenants WHERE t.type = 'owner_of' | [t.u, t.connection]][0] AS owner_array,
[t IN tenants WHERE t.type = 'house_mate' | [t.u, t.connection]] AS house_mates_array