You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neo4j指定用户发布帖子点赞数查询(含错误修正及C#实现)求助

修正后的Cypher语句及问题解析

先帮你梳理下原语句里的几个问题:

  1. 关系类型必须加冒号:前缀,比如[:WRITES],原语句里遗漏了这个格式要求
  2. WHERE user ="xyz"是直接把User节点和字符串做比较,这显然不对——你应该匹配节点的具体属性(比如用户名属性,假设是username),写成user.username = "xyz"
  3. 如果想完整展示用户的所有帖子(包括没有点赞的,点赞数显示0),得用OPTIONAL MATCH替代直接的MATCH,否则无点赞的帖子会被过滤掉

情况1:仅返回有点赞记录的帖子

MATCH (user:User)-[:WRITES]->(myp:Post)<-[l:LIKES]-()
WHERE user.username = "xyz"
RETURN myp, count(l) AS likeCount

情况2:返回用户所有帖子(含无点赞的,点赞数为0)

这个场景更实用,能完整展示用户的发帖数据:

MATCH (user:User)-[:WRITES]->(myp:Post)
WHERE user.username = "xyz"
OPTIONAL MATCH (myp)<-[l:LIKES]-()
RETURN myp, count(l) AS likeCount

C#实现步骤

首先需要安装Neo4j官方的.NET驱动包,在NuGet里搜索Neo4j.Driver并安装最新稳定版即可。

完整示例代码

using Neo4j.Driver;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;

public class Neo4jPostHandler
{
    private readonly IDriver _neo4jDriver;

    // 初始化驱动,替换成你的Neo4j连接信息
    public Neo4jPostHandler(string uri, string dbUsername, string dbPassword)
    {
        _neo4jDriver = GraphDatabase.Driver(uri, AuthTokens.Basic(dbUsername, dbPassword));
    }

    // 查询指定用户的帖子及对应点赞数
    public async Task<List<PostWithLikeCount>> FetchUserPostsWithLikes(string targetUsername)
    {
        var resultList = new List<PostWithLikeCount>();

        // 创建会话执行查询
        using var session = _neo4jDriver.Session();
        var queryResult = await session.RunAsync(@"
            MATCH (user:User)-[:WRITES]->(myp:Post)
            WHERE user.username = $username
            OPTIONAL MATCH (myp)<-[l:LIKES]-()
            RETURN myp, count(l) AS likeCount
        ", new { username = targetUsername });

        // 遍历解析结果
        await foreach (var record in queryResult)
        {
            // 提取Post节点的属性,根据你的实际节点属性调整字段
            var postNode = record["myp"].As<INode>();
            var postInfo = new Post
            {
                Id = postNode.Id,
                Title = postNode.Properties["title"].As<string>(),
                Content = postNode.Properties["content"].As<string>()
                // 其他Post属性按需添加,比如发布时间createTime等
            };

            resultList.Add(new PostWithLikeCount
            {
                Post = postInfo,
                LikeCount = record["likeCount"].As<int>()
            });
        }

        return resultList;
    }

    // 释放驱动资源
    public void Dispose()
    {
        _neo4jDriver?.Dispose();
    }
}

// 辅助类:存储Post的基础信息
public class Post
{
    public long Id { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    // 可根据你的节点结构添加更多属性
}

// 辅助类:存储帖子+点赞数的组合结果
public class PostWithLikeCount
{
    public Post Post { get; set; }
    public int LikeCount { get; set; }
}

使用示例

// 替换为你的Neo4j连接参数
await using var postHandler = new Neo4jPostHandler("bolt://localhost:7687", "neo4j", "your-db-password");
var userPosts = await postHandler.FetchUserPostsWithLikes("xyz");

// 遍历输出结果
foreach (var item in userPosts)
{
    Console.WriteLine($"帖子标题:{item.Post.Title},点赞数:{item.LikeCount}");
}

内容的提问来源于stack exchange,提问作者Swaroop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:15:25