【发布时间】:2016-09-10 22:22:58
【问题描述】:
我尝试使用 C# 驱动程序将所有数据从集合中获取到 MongoDB 服务器。 这个想法是连接到服务器并获取所有集合而不是插入到类列表中。
List<WatchTblCls> wts;
List<UserCls> users;
List<SymboleCls> syms;
public WatchTbl()
{
InitializeComponent();
wts = new List<WatchTblCls>();
users = new List<UserCls>();
syms = new List<SymboleCls>();
}
public async void getAllData()
{
client = new MongoClient("mongodb://servername:27017");
database = client.GetDatabase("WatchTblDB");
collectionWatchtbl = database.GetCollection<WatchTbl>("Watchtbl");
collectionUser = database.GetCollection<UserCls>("Users");
collectionSymbole = database.GetCollection<SymboleCls>("Users");
var filter = new BsonDocument();
using (var cursor = await collectionWatchtbl.FindAsync(filter))
{
while (await cursor.MoveNextAsync())
{
var batch = cursor.Current;
foreach (var document in batch)
{
wts.Add(new WatchTblCls(document["_id"], document["userId"], document["wid"], document["name"], document["Symboles"]));
}
}
}
}
我在
下得到这个错误wts.Add(new WatchTblCls(document["_id"], document["userId"], document["wid"], document["name"], document["Symboles"]));
无法将 [] 索引应用于“WatchTbl”类型的表达式
【问题讨论】:
-
看起来您正在尝试将完整的集合读入不同的投影类。我说的对吗?
-
是的,因为当我尝试直接从服务器显示集合需要时间(太长),所以我需要将其插入到列表 1 中,而不是将列表添加到 datagridview 中
-
你不能做某种分页,你不需要完全获得完整的集合吗?相反,你得到前 50 个,然后在下一页你得到下一个 50?如果您的集合太大,那么将其存储到本地列表时会占用大量内存。
-
也许在下一步我会这样做,但现在我需要展示它
-
即使你先插入一个列表,你也在迭代所有的数据。如果您有大量数据并且互联网连接速度很慢,那么将其放入列表对您没有帮助,因为无论如何您都会浏览所有数据。 :) 试试答案,让我知道它是否适合你。但现在分页是你最好的答案。