以下是一个使用ASP.NET Core Web API和MongoDB的示例代码,该代码可以与多个集合进行交互:
首先,确保你已经安装了MongoDB.Driver
和MongoDB.Driver.Core
NuGet包。
接下来,创建一个名为MongoDbContext
的类,该类继承自IMongoDbContext
接口,并实现所需的方法。这个类将用于与MongoDB进行交互。
using MongoDB.Driver;
public class MongoDbContext : IMongoDbContext
{
private readonly IMongoDatabase _database;
public MongoDbContext(string connectionString, string databaseName)
{
var client = new MongoClient(connectionString);
_database = client.GetDatabase(databaseName);
}
public IMongoCollection GetCollection(string collectionName)
{
return _database.GetCollection(collectionName);
}
}
然后,创建一个名为WeatherForecast
的简单模型类,用于示例。
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
public class WeatherForecast
{
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
public string Location { get; set; }
public DateTime Date { get; set; }
public int Temperature { get; set; }
}
接下来,创建一个名为WeatherForecastRepository
的类,该类将使用MongoDbContext
与MongoDB集合进行交互。
public class WeatherForecastRepository : IWeatherForecastRepository
{
private readonly IMongoCollection _collection;
public WeatherForecastRepository(IMongoDbContext dbContext)
{
_collection = dbContext.GetCollection("WeatherForecasts");
}
public async Task> GetAll()
{
var result = await _collection.Find(_ => true).ToListAsync();
return result;
}
public async Task GetById(string id)
{
var filter = Builders.Filter.Eq(f => f.Id, id);
var result = await _collection.Find(filter).FirstOrDefaultAsync();
return result;
}
public async Task Create(WeatherForecast weatherForecast)
{
await _collection.InsertOneAsync(weatherForecast);
}
public async Task Update(string id, WeatherForecast weatherForecast)
{
var filter = Builders.Filter.Eq(f => f.Id, id);
await _collection.ReplaceOneAsync(filter, weatherForecast);
}
public async Task Delete(string id)
{
var filter = Builders.Filter.Eq(f => f.Id, id);
await _collection.DeleteOneAsync(filter);
}
}
最后,在你的控制器中使用WeatherForecastRepository
进行数据访问。
[ApiController]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly IWeatherForecastRepository _repository;
public WeatherForecastController(IWeatherForecastRepository repository)
{
_repository = repository;
}
[HttpGet]
public async Task GetAll()
{
var result = await _repository.GetAll();
return Ok(result);
}
[HttpGet("{id}")]
public async Task GetById(string id)
{
var result = await _repository.GetById(id);
if (result == null)
{
return NotFound();
}
return Ok(result);
}
[HttpPost]
public async Task Create(WeatherForecast weatherForecast)
{
await _repository.Create(weatherForecast);
return CreatedAtAction(nameof(GetById), new { id = weatherForecast.Id }, weatherForecast);
}
[HttpPut("{id}")]
public async Task Update(string id, WeatherForecast weatherForecast)
{
await _repository.Update(id, weatherForecast);
return NoContent();
}
[HttpDelete("{id}")]
public async Task Delete(string id)
{
await _repository.Delete(id);
return NoContent();
}
}
这就是一个使用ASP.NET Core Web API和MongoDB与多个集合进行交互的示例。你可以根据自己的需求进行修改和扩展。