如何实现“findone”和“;EnsureIndex"在mongo DB Driver 2.0版本中使用c#

本文关键字:Driver DB mongo 版本 实现 何实现 findone EnsureIndex quot | 更新日期: 2023-09-27 18:06:06

当我使用FindOne时,它说"'MongoClientExtensions.GetServer(MongoClient)'已过时:'使用新的API代替。'观察者。

这是我的代码

collection.EnsureIndex(IndexKeys.Ascending("Username", "Type"), IndexOptions.SetUnique(true));
        var userlog = collection.FindOne(Query<UserLog>.Where(ul => ul.Username == username && ul.Type == type));

如何实现“findone”和“;EnsureIndex"在mongo DB Driver 2.0版本中使用c#

我希望这可以帮助你的FindOne函数

public async static Task<TModel> FindOne<TModel>(this IMongoCollection<TModel> collection, FilterDefinition<TModel> filter)
    {
        FindOptions<TModel> options = new FindOptions<TModel> { Limit = 1 };
        IAsyncCursor<TModel> task = await collection.FindAsync(filter, options);
        List<TModel> list = await task.ToListAsync();
        TModel result = list.FirstOrDefault();
        return result;
    }

public static T FindOne<T>(this IMongoCollection<T> collection, IMongoQuery query)
    {
        return collection.Find(query.ToBsonDocument()).FirstOrDefault();
    }

你可以在你的EnsureIndex函数中使用这些链接

如何在MongoDB中创建索引

在MongoDB中使用。net driver 2.0构建索引

我对FindOne问题没有任何想法,因为我不擅长c#。但是对于EnsureIndex:这不是一个好的使用方式。

  1. EnsureIndex检查索引和这种使用,导致繁重和不必要的往返。
  2. 假设集合有数百万个文档,并且突然发生意外事件导致删除索引。所以EnsureIndex开始创建索引作为前台和冻结收集(没有任何管理)。
  3. 我建议您使用CreateIndex作为这类维护工作的后台和管理进程。

最后,希望这篇文章对你有所帮助