我正在尝试从mongodb Server获取Item,有时它的工作,并且在4-5尝试之后它停止在最后一行中共振(我无法将对象取出查询) 以前有人有吗?取出物品的正确方法是什么?
var client = new MongoClient(connectionString);
var server = client.GetServer();
var database = server.GetDatabase("myPlaces");
var collection = database.GetCollection<MongoPlace>("Places");
int startDay = int.Parse(Request.QueryString["day"]);
MongoPlace mp = collection.AsQueryable<MongoPlace>().Where(x => x.guid ==
Request.QueryString["id"]).FirstOrDefault();
答案 0 :(得分:0)
您可能正在达到默认的连接池限制。
由于它看起来像是一个Web应用程序,因此您不应该每个Web应用程序实例多次打开客户端。
MongoClient
,MongoServer
,MongoDatabase
和MongoCollection
都是线程安全的,通常应该只有一个实例。 (有关更多信息,请参阅here)。
您可能希望在应用程序启动时执行此操作,然后静态维护连接,直到应用程序退出。
在我的ASP.NET MVC应用程序中,我通常添加一个“DatabaseConfig”类,其调用方式与其他应用程序配置相同。作为一个例子,我在项目中得到的一些代码我正在使用MongoDB构建(目前还没有任何错误处理):
var client = new MongoClient(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString);
var server = client.GetServer();
DataLayer.Client = client;
DataLayer.Server = server;
var settings = new MongoDatabaseSettings(server, "default");
settings.WriteConcern = WriteConcern.Acknowledged;
DataLayer.Database = DataLayer.GetDatabase(settings);
然后,在Application_Start中,我调用包含上述代码的Initialize
方法。
DatabaseConfig.Initialize();