diff --git a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.Tests/AggregationPipelineLiveTest.cs b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.Tests/AggregationPipelineLiveTest.cs index 6ddfebe944..cc2c638b92 100644 --- a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.Tests/AggregationPipelineLiveTest.cs +++ b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.Tests/AggregationPipelineLiveTest.cs @@ -3,7 +3,7 @@ public class AggregationPipelineLiveTest : IAsyncLifetime { private readonly MongoDbContainer _mongoDbContainer = - new MongoDbBuilder().Build(); + new MongoDbBuilder("mongo:8.0").Build(); [Fact] public async Task GivenIHaveUsersAndRolesCollectionsInMongoDB_WhenICallTheGetUserModelsMethod_ThenItMergesTheTwoCollectionsIntoOneResult() @@ -30,7 +30,7 @@ public async Task GivenIHaveUsersAndRolesCollectionsInMongoDB_WhenICallTheGetUse await MongoHelper.AddSeedData(database); //Act - var actualResult = await sut.GetAllUsers(); + var actualResult = await sut.GetAllStudentsAsync(); //Assert Assert.NotNull(actualResult); diff --git a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.Tests/JoinCollectionsAggregationPipeline.Tests.csproj b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.Tests/JoinCollectionsAggregationPipeline.Tests.csproj index 1f578ee040..23889a0669 100644 --- a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.Tests/JoinCollectionsAggregationPipeline.Tests.csproj +++ b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.Tests/JoinCollectionsAggregationPipeline.Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 enable enable @@ -10,11 +10,11 @@ - - - - - + + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.csproj b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.csproj index c158bb110e..9ee4c76288 100644 --- a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.csproj +++ b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline.csproj @@ -2,14 +2,14 @@ Exe - net8.0 + net10.0 enable enable - - + + diff --git a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Models/Course.cs b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Models/Course.cs index 7b1aad2c79..96856b6c80 100644 --- a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Models/Course.cs +++ b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Models/Course.cs @@ -1,32 +1,29 @@ using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; -using System.ComponentModel.DataAnnotations; namespace JoinCollectionsAggregationPipeline.Models; public class Course { [BsonElement("_id")] - [BsonRepresentation(BsonType.ObjectId)] - public string Id { get; set; } = string.Empty; + [BsonRepresentation(BsonType.ObjectId)] + public string Id { get; set; } = string.Empty; - [Required] - [BsonElement("Name")] + [BsonElement("Name")] public string Name { get; set; } = string.Empty; - [Required] [BsonElement("Code")] - public string Code { get; set; } = string.Empty; + public string Code { get; set; } = string.Empty; public override bool Equals(object? obj) { - if (obj is not Course course) return false; + if (obj is not Course course) return false; return Name == course.Name && Code == course.Code; } public override int GetHashCode() { - return HashCode.Combine(Id, Name, Code); + return HashCode.Combine(Name, Code); } -} \ No newline at end of file +} diff --git a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Models/Student.cs b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Models/Student.cs index b03d177b99..f56dabc7be 100644 --- a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Models/Student.cs +++ b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Models/Student.cs @@ -1,41 +1,43 @@ using MongoDB.Bson.Serialization.Attributes; using MongoDB.Bson; -using System.ComponentModel.DataAnnotations; namespace JoinCollectionsAggregationPipeline.Models; -public class Student { - +public class Student +{ [BsonElement("_id")] - [BsonRepresentation(BsonType.ObjectId)] - public string Id { get; set; } = string.Empty; + [BsonRepresentation(BsonType.ObjectId)] + public string Id { get; set; } = string.Empty; - [Required] - [BsonElement("FirstName")] - public string FirstName { get; set; } = string.Empty; + [BsonElement("FirstName")] + public string FirstName { get; set; } = string.Empty; - [Required] - [BsonElement("LastName")] + [BsonElement("LastName")] public string LastName { get; set; } = string.Empty; - [Required] [BsonElement("Major")] public string Major { get; set; } = string.Empty; - [BsonElement("StudentCourses")] - public List StudentCourses { get; set; } = new(); + [BsonElement("StudentCourses")] + public List StudentCourses { get; set; } = []; - public override bool Equals(object? obj) - { - if (obj is not Student student) return false; - return FirstName == student.FirstName && - LastName == student.LastName - && StudentCourses.All(course => course - .Equals(student.StudentCourses.ElementAt(StudentCourses.IndexOf(course)))); + public override bool Equals(object? obj) + { + if (obj is not Student student) return false; + return FirstName == student.FirstName + && LastName == student.LastName + && StudentCourses.SequenceEqual(student.StudentCourses); } public override int GetHashCode() { - return HashCode.Combine(Id, FirstName, LastName, Major, StudentCourses); + var hash = new HashCode(); + hash.Add(FirstName); + hash.Add(LastName); + + foreach (var course in StudentCourses) + hash.Add(course); + + return hash.ToHashCode(); } -} \ No newline at end of file +} diff --git a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Program.cs b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Program.cs index a1023d5340..400dc45abb 100644 --- a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Program.cs +++ b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/Program.cs @@ -4,7 +4,7 @@ using Testcontainers.MongoDb; using JoinCollectionsAggregationPipeline.Models; -await using var mongoDbContainer = new MongoDbBuilder().Build(); +await using var mongoDbContainer = new MongoDbBuilder("mongo:8.0").Build(); await mongoDbContainer.StartAsync(); var mongoClient = new MongoClient(mongoDbContainer.GetConnectionString()); @@ -14,10 +14,10 @@ var database = mongoClient.GetDatabase(DatabaseConfiguration.DatabaseName); await MongoHelper.AddSeedData(database); -var users = await repository.GetAllUsers(); -foreach (var user in users) +var students = await repository.GetAllStudentsAsync(); +foreach (var student in students) { - Console.WriteLine(user.ToJson()); + Console.WriteLine(student.ToJson()); } await mongoDbContainer.StopAsync(); \ No newline at end of file diff --git a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/StudentRepository.cs b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/StudentRepository.cs index 0f56334c2d..524db5e4bf 100644 --- a/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/StudentRepository.cs +++ b/dotnet-mongo-db/JoinCollectionsAggregationPipeline/JoinCollectionsAggregationPipeline/StudentRepository.cs @@ -14,7 +14,7 @@ public StudentRepository(MongoClient client) _studentCollection = database.GetCollection("Students"); } - public async Task> GetAllUsers() + public async Task> GetAllStudentsAsync() { //Empty Pipeline var studentAggregationPipeline = _studentCollection.Aggregate();