使用c#过滤MongoDB数据库并将文档拉入DataGridView

本文关键字:文档 DataGridView 过滤 MongoDB 数据库 使用 | 更新日期: 2023-09-27 18:15:00

我试图过滤MongoDB数据库与文本框内存储的文本。例如,我将"turtle"和所有具有"Name"的条目"turtle"将出现在datagridview中。

这里是连接到MongoDB数据库的按钮代码,获取数据库名称和"用户"集合,并应用文本框txtName内的任何过滤器。

    private void btnSearch_Click(object sender, EventArgs e)
    {
        var client = new MongoClient("mongodb://localhost");
        var database = client.GetDatabase("test");
        var collection = database.GetCollection<BsonDocument>("users");
        var filter = Builders<BsonDocument>.Filter.Eq("Name", txtName.Text);
    }

我不知道下一步该去哪里。然后,我需要将所有数据绑定到datagridviews数据源中,以匹配名称为turtle的记录。

        dgvAll.DataSource = somevariable;

谢谢

使用c#过滤MongoDB数据库并将文档拉入DataGridView

将数据从数据库中取出

var results = collection.Find(filter).ToList();

这将给你一个对象列表,你可以像绑定其他集合一样绑定这些对象。

你可能想看看强类型的模型,而不是使用文本查询。例如

public class MyModel
{
    public string SomeProperty { get; set; }
    public string SomeOtherProperty { get; set; }
}

当你查询

private void btnSearch_Click(object sender, EventArgs e)
{
    var client = new MongoClient("mongodb://localhost");
    var database = client.GetDatabase("test");
    var collection = database.GetCollection<MyModel>("users");
    var filter = Builders<MyModel>.Filter.Eq(x => x.SomeProperty == "SomeValue" && x.SomeOtherProperty == "SomeOtherValue");
    var results = collection.Find(filter).ToList();
    //Now you will have a list of MyModel objects in results - List<MyModel>
}

一旦你有了你的集合(无论你用什么方式将它从数据库中取出),你可以像这样绑定:

dgvAll.DataSource = results;
dgvAll.DataBind();

您需要遵循以下步骤…

  1. 查询DB

    var result = collection.Find(filter).ToList();
    

    结果将包含数据列表

  2. BsonDocument反序列化为POCO类

    public class User
    {
        public string Name { get; set; }
        public BsonObjectId _id { get; set; }
    }
    IEnumerable<User> allUsers = BsonSerializer.Deserialize<IEnumerable<User>>(result);
    
  3. 现在可以绑定数据源了

    dgvAll.DataSource = allUsers;
    dgvAll.DataBind();
    

你的最终代码看起来像这样…

private void btnSearch_Click(object sender, EventArgs e)
{
var client = new MongoClient("mongodb://localhost");
var database = client.GetDatabase("test");
var collection = database.GetCollection<MyModel>("users");
var filter = Builders<BsonDocument>.Filter.Eq("Name", txtName.Text);
var results = collection.Find(filter).ToList();
IEnumerable<User> allUsers = BsonSerializer.Deserialize<IEnumerable<User>>(result);
dgvAll.DataSource = allUsers;
dgvAll.DataBind();
}

N。B:如果你没有User类,首先创建一个必要的属性。