MongoDb高效的连接创建
本文关键字:创建 连接 高效 MongoDb | 更新日期: 2023-09-27 17:59:46
我想知道创建/关闭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;
}
我的问题是,这是否是一个有效的设计,否则我该如何改进它?
非常感谢。
我相信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; }
}