0
안녕하세요 저는 소셜 네트워크를 만들고 싶습니다. 현재 나는 친구들에게 친구들을 추천 할 수 있도록 '친구의 친구'를 표시하려고합니다. Node.js 서버에서 Neo4j 쿼리를 구현하고 있습니다. 문제는 현재의 Cypher 구문에 구문 오류가 발생한다는 것입니다. 누군가가 쿼리를보고 무엇이 잘못되었는지를 알 수 있기를 바랍니다.Cypher를 사용하여 Neo4j의 친구들 만 친구로 얻는 방법
사이퍼 구문 :
MATCH (n:User{mongoId: {idNeo}})
MATCH n-[:FRIENDS_WITH*2]-m
WHERE NOT n-[:FRIENDS_WITH]-m
RETURN m
전체 경로 : 그래프 패턴의 노드 주위
routes.get('/users/friendsoffriends/:id', function(req, res) {
//res.contentType('application/json');
var ids = [];
const id = req.param('id');
session
.run("MATCH (n:User{mongoId: {idNeo}}) MATCH n-[:FRIENDS_WITH*2]-m WHERE NOT n-[:FRIENDS_WITH]-m RETURN m", {idNeo: id})
.then(function(result) {
result.records.forEach(function(record){
ids.push(record._fields[0].properties.mongoUserId);
});
console.log(ids);
return ids;
})
.then((ids)=>{
User.find({_id: { $in: ids}})
.then((blogPost) => {
res.status(200).json(blogPost);
})
})
.catch((error) => {
res.status(400).json(error);
})
});
감사합니다. 바보 같은 실수입니다. 결과에서 n이 어떻게 제외 될 수 있는지 알고 있습니까? 이제 친구 A의 친구를 알고 싶으면 사람 A 자신도 나타납니다. – Mike
여러 노드가 있습니까? 동일한 두 노드간에 FRIENDS_WITH 관계가 있습니까? 그것이 * 2 확장이 시작 노드로 돌아 가기 위해 알고있는 유일한 방법입니다. 그것은 모델링 문제가 될 것 같아? 그렇지 않으면 그래프에 맞으면 WHERE 절에'AND n <> m'을 추가하십시오. – InverseFalcon
아래 링크를 참조하십시오. https://stackoverflow.com/questions/19032147/cypher-travel-in-several-crossed-chained-list 아래 질문을 실행 해 보았지만 나에게 도움이되지 못했습니다. 누군가 나를 도울 수 있습니까? Match u : 학생 - [: FRIEND * 0..1] -> 친구 : 학생 어디 u.id = 84 친구와 친구 - [rel : TIMELINE *] -> 활동 여기서 모두 어디 r.idUser = id (친구) 반환 friend.me.fullName – Satish