Where and FirstOrDefault and FirstOrDefaultAsync
d6038506eb531e57352d455bc57ed7daabd6bb16
2 files changed
src/BsonExtensions/BsonJsonExtensions.cssrc/MongoEfCore/Program.cs
diff --git a/src/BsonExtensions/BsonJsonExtensions.cs b/src/BsonExtensions/BsonJsonExtensions.cs
index 560cfc3..a3ab7e2 100644
--- a/src/BsonExtensions/BsonJsonExtensions.cs
+++ b/src/BsonExtensions/BsonJsonExtensions.cs
@@ -7,6 +7,7 @@ using MongoDB.Driver;
using MongoDB.Bson.Serialization;
using BsonExtensions.Converters;
+using System.Linq.Expressions;
namespace BsonExtensions;
@@ -192,6 +193,17 @@ public static class BsonJsonExtensions
// Extensions synchronous
// ==============================================================================================================
+ public static IFindFluent<T, T>? Where<T>(this IMongoCollection<T> collection, Expression<Func<T, bool>> filter)
+ {
+ return collection.Find(filter);
+ }
+
+ public static T? FirstOrDefault<T>(this IMongoCollection<T> collection, Expression<Func<T, bool>> filter)
+ {
+ var results = collection.Find(filter);
+
+ return results.FirstOrDefault();
+ }
public static BsonDocument RunCommand(this IMongoDatabase db, string JsonDocument, ReadPreference? readPreference = null)
{
@@ -276,5 +288,16 @@ public static class BsonJsonExtensions
return collection.Watch<BsonDocument>(bsonDocuments, options);
}
+ // ------------------------------------
+
+ public async static Task<T?> FirsOrDefaultAsync<T>(this IMongoCollection<T> collection, Expression<Func<T, bool>> filter)
+ {
+ var results = await collection.FindAsync(filter);
+
+ if (results == null)
+ return default;
+ else
+ return await results.FirstOrDefaultAsync();
+ }
}
\ No newline at end of file
diff --git a/src/MongoEfCore/Program.cs b/src/MongoEfCore/Program.cs
index 826abb2..a52644b 100644
--- a/src/MongoEfCore/Program.cs
+++ b/src/MongoEfCore/Program.cs
@@ -1,73 +1,75 @@
+using BsonExtensions;
using Microsoft.EntityFrameworkCore;
using MongoDB.Driver;
-using BsonExtensions;
using MongoEfCore;
using System.Diagnostics;
var connectionString = "mongodb://192.168.28.123:27017";
-var settings = MongoClientSettings.FromConnectionString($"{connectionString}");
-
-settings.ServerSelectionTimeout = TimeSpan.FromSeconds(1);
+if (1 == 1)
+{
+ var sw1 = Stopwatch.StartNew();
-var dbClient = new MongoClient(settings);
+ var settings = MongoClientSettings.FromConnectionString($"{connectionString}");
-var movies = dbClient?.GetDatabase("testdb1").GetCollection("movies");
+ settings.ServerSelectionTimeout = TimeSpan.FromSeconds(1);
-var iiii = await movies.FindAsync("{ _id : '66d48adca720951e07550d78' }");
+ var dbClient = new MongoClient(settings);
-var j = iiii.FirstOrDefault();
+ var movies = dbClient?.GetDatabase("testdb1").GetCollection<Movie>("movies");
-//====================================
+ var aaa1 = movies.FirstOrDefault(x => x._id == MongoDB.Bson.ObjectId.Parse("66d48adca720951e07550d78"));
+ var aaa2 = await movies.Where(x => x._id == MongoDB.Bson.ObjectId.Parse("66d48adca720951e07550d78")).FirstOrDefaultAsync();
+ var aaa3 = await movies.FirsOrDefaultAsync(x => x._id == MongoDB.Bson.ObjectId.Parse("66d48adca720951e07550d78"));
+ for (int i = 0; i < 1000; i++)
+ {
+ await movies.FirsOrDefaultAsync(x => x._id == MongoDB.Bson.ObjectId.Parse("66d48adca720951e07550d78"));
+ }
-var client = new MongoClient(connectionString);
-var db = MyDbContext.Create(client.GetDatabase("testdb1"));
+ var movie1 = await movies.FirsOrDefaultAsync(x => x._id == MongoDB.Bson.ObjectId.Parse("66d48adca720951e07550d78"));
-db.Database.EnsureCreated();
-//for (int i = 0; i < 10000; i++)
-//{
-// var movie1 = new Movie()
-// {
-// Title = "Testbeeld " + i,
-// Rated = i.ToString(),
-// Plot = "this is movie " + i
-// };
-// db.Movies.Add(movie1);
-// var status1 = await db.SaveChangesAsync();
-//}
+ Console.WriteLine($"{sw1.ElapsedMilliseconds}mS {movie1.Title}");
-//return;
+ return;
+}
-await db.Movies.FirstOrDefaultAsync();
+//====================================
-//await db.Movies.CountAsync();
+var sw2 = Stopwatch.StartNew();
-var sw = Stopwatch.StartNew();
-//var movie = await db.Movies.AsNoTracking().FirstOrDefaultAsync(m => m.Title == "Back to the Future");
+var client = new MongoClient(connectionString);
-var movie = await db.Movies.FirstOrDefaultAsync(m => m._id == MongoDB.Bson.ObjectId.Parse("66d48adca720951e07550d78"));
+var db = MyDbContext.Create(client.GetDatabase("testdb1"));
-Console.WriteLine($"{sw.ElapsedMilliseconds}mS");
+//db.Database.EnsureCreated();
-if(movie == null)
+for (int i = 0; i < 1000; i++)
{
- movie = new Movie()
- {
- Title = "Back to the Future",
- Rated = "9",
- Plot = "people in the past going to the future"
- };
- db.Movies.Add(movie);
- var status = await db.SaveChangesAsync();
+ await db.Movies.AsNoTracking().FirstOrDefaultAsync(m => m._id == MongoDB.Bson.ObjectId.Parse("66d48adca720951e07550d78"));
}
+var movie2 = await db.Movies.AsNoTracking().FirstOrDefaultAsync(m => m._id == MongoDB.Bson.ObjectId.Parse("66d48adca720951e07550d78"));
+
+Console.WriteLine($"{sw2.ElapsedMilliseconds}mS {movie2.Title}");
+
+//if(movie == null)
+//{
+// movie = new Movie()
+// {
+// Title = "Back to the Future",
+// Rated = "9",
+// Plot = "people in the past going to the future"
+// };
+// db.Movies.Add(movie);
+// var status = await db.SaveChangesAsync();
+//}
-Console.WriteLine(movie.Plot);
+//Console.WriteLine(movie.Plot);