c# - 如何检查 MongoDB C# 中的索引(是否存在),因为 IndexExist 从新版本中已弃用

标签 c# mongodb

我刚刚将旧的 MongoDB C# 驱动程序更新到 2.7.3 版本,从 nuget 包更新后,我收到了很多错误行

EnsureIndex is not defined

IndexExists not defined

ping is not defined

getServer is not defined

他们的更新文档或文档也将解释如何使用较新版本获取这些内容。

var connectionString = string.Format("mongodb://{0}:{1}", mongoServerInstance.Address.Host, mongoServerInstance.Address.Port);
            connectionString = ReplaceHostNames(connectionString);
            _logger.Debug("checking for indexes on server, {0}", mongoServerInstance.Address.Host);
            var settings = MongoClientSettings.FromUrl(new MongoUrl(connectionString));
            settings.ConnectionMode = ConnectionMode.Direct;
            settings.ReadPreference = ReadPreference.SecondaryPreferred;
            var mongoClient = new MongoClient(settings);
            var listMongo = mongoClient.ListDatabases();
            var server = mongoClient.GetServer();

            foreach (var index in MongoRepositoryConfiguration.Indexes)
            {
                var mongoDataBase = mongoClient.GetDatabase(index.DatabaseName);

                if (!mongoClient.GetDatabase(index.DatabaseName)
                            .GetCollection<BsonDocument>(index.CollectionName)
                            .IndexExists(index.MongoIndexKeys))
                {
                    if (index.IndexName != "")
                    {
                        if (!mongoClient.GetDatabase(index.DatabaseName)
                                   .GetCollection<BsonDocument>(index.CollectionName)
                                   .IndexExistsByName(index.IndexName))
                        {
                            AddIndexToList(index, nonExistentIndexes);
                        }
                    }
                    else
                    {
                        AddIndexToList(index, nonExistentIndexes);
                    }
                }
            }

            server.Disconnect();

最佳答案

在 2.x 驱动程序中,您可以通过 collection.Indexes.List() 方法获取给定集合的索引详细信息。这是创建两个索引并使用 MongoDB.Entities 获取它们的名称的示例[免责声明:我是作者]

using MongoDB.Entities;
using MongoDB.Driver;
using System;

namespace StackOverflow
{
    public class Program
    {
        public class User : Entity
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
            public int Age { get; set; }
        }

        static void Main(string[] args)
        {
            new DB("test");

            DB.Index<User>()
              .Key(u => u.FirstName, KeyType.Text)
              .Key(u => u.LastName, KeyType.Text)
              .Create();

            DB.Index<User>()
              .Key(u => u.Age, KeyType.Ascending)
              .Create();

            var indexes = DB.Collection<User>().Indexes.List().ToList();

            foreach (var index in indexes)
            {
                Console.WriteLine(index.GetElement("name"));
            }

            Console.Read();
        }
    }
}

关于c# - 如何检查 MongoDB C# 中的索引(是否存在),因为 IndexExist 从新版本中已弃用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56577878/

相关文章:

c# - 从 C# 中的其他方法访问方法的字符串

c# - 是否可以强制更新接口(interface)?

c# - 使用 C# 和 SMO,如何将备份设备添加到 SQL Server?

mongodb - 在 mongodb 中查找和替换 NumberLong 类型的字段

node.js - mongodb 子文档是否等同于 Firestore 子集合?

mongodb - 为什么 Spring Data MongoDB 无法实例化这种嵌套类型结构?

c# - 替换字符串中的 Unicode 转义序列

c# - 为什么我必须显式提供泛型参数类型而编译器应该推断类型?

python - 与MongoDB结合使用Dataclass中的 '_id'应该如何处理?

mongodb - 蒙戈雷商店和收藏