如何使用Cypher只在Neo4j中获得朋友的朋友

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Cypher只在Neo4j中获得朋友的朋友相关的知识,希望对你有一定的参考价值。

您好,我想建立一个社交网络。目前我正在尝试展示“朋友的朋友”,以便我可以向用户推荐朋友。我正在Node.js服务器中实现Neo4j查询。问题是我的当前Cypher语法出现语法错误。我希望有人可以看看查询并告诉我有什么问题。

Cypher语法:

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);
    })
});
答案

您的Cypher查询缺少图形模式中节点周围的parens。试试这个:

MATCH (n:User{mongoId: {idNeo}}) 
MATCH  (n)-[:FRIENDS_WITH*2]-(m) 
WHERE NOT (n)-[:FRIENDS_WITH]-(m) 
RETURN m

以上是关于如何使用Cypher只在Neo4j中获得朋友的朋友的主要内容,如果未能解决你的问题,请参考以下文章

如何往neo4j中批量插入cypher语句

neo4j cypher shell - 内存限制异常

如何使用 Neo4J 的 Cypher 查询返回关系类型?

neo4j cypher:如何更改关系类型

如何忽略 cypher (neo4j) 中 java 存储过程的产量值?

如何使用 Cypher neo4j 将三列连接为一列并获取其中唯一条目的计数?