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

在ASP.NET Core Web API中实现MongoDB一对多关联及推文查询

在ASP.NET Core Web API中通过用户名查询用户所有推文

1. 安装MongoDB驱动

确保项目中安装MongoDB官方驱动包:

Install-Package MongoDB.Driver

也可通过NuGet包管理器搜索MongoDB.Driver完成安装。

2. 配置MongoDB连接

在appsettings.json中添加连接字符串与数据库名称:

{
  "MongoDB": {
    "ConnectionString": "mongodb://localhost:27017",
    "DatabaseName": "TweetDB"
  }
}

在Program.cs中注册MongoDB服务到依赖注入容器:

using MongoDB.Driver;

var builder = WebApplication.CreateBuilder(args);

// 注册MongoDB客户端
builder.Services.AddSingleton<IMongoClient>(sp =>
{
    var config = builder.Configuration.GetSection("MongoDB");
    var connectionString = config["ConnectionString"];
    return new MongoClient(connectionString);
});

// 注册MongoDB数据库实例
builder.Services.AddScoped(sp =>
{
    var client = sp.GetRequiredService<IMongoClient>();
    var dbName = builder.Configuration.GetSection("MongoDB")["DatabaseName"];
    return client.GetDatabase(dbName);
});

// 注册推文仓储类
builder.Services.AddScoped<ITweetRepository, TweetRepository>();

// 添加控制器服务
builder.Services.AddControllers();

var app = builder.Build();

app.MapControllers();

app.Run();

3. 完善实体类(可选但推荐)

为让MongoDB正确映射Id字段,给实体类的Id属性添加MongoDB特性:

using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;

public class Tweet
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    public string TweetText { get; set; }
    public DateTime TweetTime { get; set; }
    public string Username { get; set; }
}

public class UserRegistration
{
    [BsonId]
    [BsonRepresentation(BsonType.ObjectId)]
    public string Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Username { get; set; }
    public string Email { get; set; }
}

4. 定义推文仓储类

创建仓储接口与实现类,封装MongoDB查询逻辑:

using MongoDB.Driver;

public interface ITweetRepository
{
    Task<List<Tweet>> GetTweetsByUsernameAsync(string username);
}

public class TweetRepository : ITweetRepository
{
    private readonly IMongoCollection<Tweet> _tweets;

    public TweetRepository(IMongoDatabase database)
    {
        _tweets = database.GetCollection<Tweet>("Tweets");
    }

    public async Task<List<Tweet>> GetTweetsByUsernameAsync(string username)
    {
        // 构建匹配Username的查询条件
        var filter = Builders<Tweet>.Filter.Eq(t => t.Username, username);
        // 按发布时间倒序返回结果
        return await _tweets.Find(filter).SortByDescending(t => t.TweetTime).ToListAsync();
    }
}

5. 编写API控制器

创建控制器暴露查询接口:

using Microsoft.AspNetCore.Mvc;

[ApiController]
[Route("api/[controller]")]
public class TweetsController : ControllerBase
{
    private readonly ITweetRepository _tweetRepository;

    public TweetsController(ITweetRepository tweetRepository)
    {
        _tweetRepository = tweetRepository;
    }

    [HttpGet("user/{username}")]
    public async Task<ActionResult<List<Tweet>>> GetUserTweets(string username)
    {
        var tweets = await _tweetRepository.GetTweetsByUsernameAsync(username);
        if (!tweets.Any())
        {
            return NotFound($"未找到用户 {username} 的推文");
        }
        return Ok(tweets);
    }
}

测试接口

启动API后,可通过以下URL测试:

GET https://localhost:<端口号>/api/Tweets/user/yourUsername

内容的提问来源于stack exchange,提问作者Y Abhishake Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:39:40