【问题标题】:Insert collection into List from MongoDB从 MongoDB 将集合插入列表
【发布时间】: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?如果您的集合太大,那么将其存储到本地列表时会占用大量内存。
  • 也许在下一步我会这样做,但现在我需要展示它
  • 即使你先插入一个列表,你也在迭代所有的数据。如果您有大量数据并且互联网连接速度很慢,那么将其放入列表对您没有帮助,因为无论如何您都会浏览所有数据。 :) 试试答案,让我知道它是否适合你。但现在分页是你最好的答案。

标签: c# mongodb


【解决方案1】:

我不明白同时使用 WatchTblWatchTblCls 的原因。 WatchTblCls 是实体 WatchTbl 的模型吗?我不确定。

无论如何。如果您进行聚合并希望将 WatchTbl 集合转换为 WatchTblCls 列表,您所需的解决方案可能如下所示。我不知道类的定义,所以我假设:

    var client = new MongoClient("mongodb://servername:27017");
    var database = client.GetDatabase("WatchTblDB");
    var collectionWatchtbl = database.GetCollection<WatchTbl>("Watchtbl");
    var collectionUser = database.GetCollection<UserCls>("Users");
    var collectionSymbole = database.GetCollection<SymboleCls>("Users");

    var list = collectionWatchtbl.AsQueryable().Select(x => new WatchTblCls() {
        id = x.id,
        userId = x.userId,
        .....
    });

如果您可以使用相同的WatchTbl 类并且仍想将完整集合加载到本地列表(这绝对不是一个好主意):

    List<WatchTbl> list = await collectionWatchtbl.Find(x => true).ToListAsync();

【讨论】:

  • WatchTbl 是一个表单,WatchTblCls 是类。
猜你喜欢
  • 2020-11-08
  • 2022-01-04
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
相关资源
最近更新 更多