2

我想知道创建/关闭 MongoDb 连接的最有效方法。

我有一组 Restful 服务(使用 c# 创建),其中一些从 MongoDb 和一些 POST 数据中获取数据。

   public static MongoDatabase GetDatabase()
   {
      MongoServerSettings settings = new MongoServerSettings();
      settings.Server = new MongoServerAddress("localhost", 27017);
      MongoServer server = new MongoServer(settings);
      var database = server.GetDatabase("RapidDataStream");
      return database;
   }

我从我的每个服务中使用上述连接,例如列出所有传感器的服务。

public List<Sensor> getPublicSensors()
{
            List<Sensor> sensors = new List<Sensor>();
            MongoDatabase mySensor = GetDatabase();
            var query = Query.And(Query.EQ("User", BsonValue.Create("Public")));
            var mySensorRecords = mySensor.GetCollection("sensor_meta_data").Find(query);
            DataSet ds = new DataSet();

            foreach (var rec in mySensorRecords)
            {
                Sensor sensor = new Sensor();
                sensor.sensorId = rec["EnvId"].ToString();

                for (int i = 2; i < rec.ElementCount; i++)
                {
                    SensorObject so = new SensorObject();
                    so.fieldName = rec.GetElement(i).Name.ToString();
                    so.value = rec.GetElement(i).Value.ToString();
                    sensor.sensorObject.Add(so);
                }
                sensors.Add(sensor);
            }
            return sensors;
}

我的问题是,这是否是一个有效的设计,否则我该如何改进它?

非常感谢。

4

1 回答 1

1

我相信 Mongo(或驱动程序)会为我们处理一些事情,所以我使用 Create 方法:

MongoServer.Create(....)

而不是创建一个新实例。该Create方法将创建一个新实例或返回一个现有实例(每个服务器设置都是唯一的)。

事实上,只是为了向您展示我目前使用的实际方法:

internal static MongoDatabase DB(IMongoConfig config)
{
    return MongoServer
           .Create(config.ConnectionString)    //This bit is getting the MongoServer
           .GetDatabase(config.DatabaseName);  //This bit gets the Database, which is returned
}

IMongoConfig如您所见,这只是我用来指定我需要的连接字符串和数据库名称的一个小 DTO - 这与它的工作原理相结合,MongoServer.Create使得处理从同一运行代码库到多个数据库的连接变得非常容易。

public interface IMongoConfig
    {
        string ConnectionString { get; set; }
        string DatabaseName { get; set; }
    }
于 2013-02-15T15:56:58.000 回答