使用 C# 从 MongoDB 中检索信息

Retrieve info from MongoDB using C#

所以我对非关系数据库真的很陌生,我正在尝试检索我已经存储的信息,tutorial on their site 只展示了如何 get数据,但不是如何处理它,因为出于某种原因它只使用 "var" 来声明变量,当涉及到它们使用的数据类型时我迷路了。

其他线程,如 this one 似乎显式声明了它们的变量,但出于某种原因我不能这样做,我也不能使用 ToList() 方法。

我现在使用的代码就像教程中显示的那样,按照这个(或任何其他方法)如何获得我想要的信息?我知道方法成功 returns something 但我想知道如何使用它?

var collection = database.GetCollection<BsonDocument>("Events");
var filter = Builders<BsonDocument>.Filter.Eq("Event", "Idoru");
var result = collection.Find(filter).ToListAsync();

只是为了提供一些背景信息,我正在存储预定的事件,所以我试图检索我的 "Events" 集合中具有事件名称 "Idoru" 的所有内容,(我想)还会给我其他 2 个字段,即日期和描述。尽管我计划将其他类型的数据存储在其他集合中。

编辑:我刚刚意识到您使用的是 2.0 驱动程序,因为您的示例代码使用了 Builders.Filter.Eq 我已经相应地更新了答案。

当您检索集合时,它的类型为 IMongoCollection。您可以通过 BsonDocument 或特定类型检索它,例如 GetCollection 如果您有一个可序列化到 Bson 的事件 class。

新 MongoDriver 中的所有 API 都是异步的,因此您唯一的选择是对返回的任务调用 .Result 以同步使用它们。

当您调用 Find on it with your query, you get an IFindFluent 返回时。您可以对其调用 ToListAsync() 以获取对象列表。

MongoCollection<BsonDocument> collection = database.GetCollection<BsonDocument>("Events");
var filter = Builders<BsonDocument>.Filter.Eq("Event", "Idoru");
var result = collection.Find(filter).ToListAsync().Result;

当然可以:

MongoCollection<Event> collection = database.GetCollection<BsonDocument>("Events");
var filter = Builders<Event>.Filter.Eq(q => q.Name == "Idoru");
var result = collection.Find(filter).ToListAsync().Result;
// result is na IList<Event> now.

如果您更愿意直接使用 Event,并提供适当的可序列化事件 class。