如何使用cong中的mongo DB驱动程序2.0版中的IMongoDatabase接口实现“FindOne”和“EnsureIndex”?

时间:2015-08-02 04:27:42

标签: c# mongodb

当我使用FindOne时,它说''MongoClientExtensions.GetServer(MongoClient)'已经过时了:'改用新的API'。 Observer.Client“作为警告。

这是我的代码

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

2 个答案:

答案 0 :(得分:3)

我希望这可以为您的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功能

How to create indexes in MongoDB via .NET

Building indexes in MongoDB with .NET driver 2.0

答案 1 :(得分:1)

我对FindOne问题一无所知,因为我不擅长C#。 但对于EnsureIndex:这不是一个好用的方法。

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