MongoDB C# 驱动程序 - 如何查询子文档数组的属性

mongodb

1个回答

写回答

洋洋洋啊

2025-09-01 10:30

+ 关注

MongoDB
MongoDB

使用MongoDB C#驱动程序查询子文档数组的属性是一项非常常见的任务。在MongoDB中,文档可以包含数组字段,而这些数组字段中的元素可能是子文档。在一些情况下,我们可能需要查询这些子文档数组中的特定属性,以满足我们的业务需求。

在C#中使用MongoDB驱动程序进行这种查询是非常简单的。我们可以使用Builders类提供的方法来构建查询条件,然后使用Projection方法指定我们要返回的属性。下面是一个简单的例子来说明如何查询子文档数组的属性。

首先,我们需要引用MongoDB驱动程序的命名空间,如下所示:

csharp

using MongoDB.Driver;

接下来,我们需要获取到MongoDB的连接和数据库对象,这里假设我们已经完成了这些步骤。

假设我们有一个名为users的集合,其中每个文档都包含一个名为addresses的数组字段,数组中的元素是包含citycountry属性的子文档。我们想要查询users集合中所有文档的addresses数组中的city属性。

以下是查询的代码示例:

csharp

var collection = Database.Getcollection<BsonDocument>("users");

var filter = Builders<BsonDocument>.Filter.Empty;

var projection = Builders<BsonDocument>.Projection.Include("addresses.city");

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

foreach (var document in result)

{

var addresses = document["addresses"].AsBsonArray;

foreach (var address in addresses)

{

var city = address["city"].AsString;

Console.WriteLine(city);

}

}

在上面的代码中,我们首先获取到了users集合的collection对象。然后,我们使用Builders类构建了一个空的过滤器filter和一个包含addresses.city属性的投影projection

接下来,我们使用Find方法查询满足过滤器条件的所有文档,并通过Project方法将结果投影为指定的属性。最后,我们通过遍历结果集合中的每个文档和每个子文档,获取到了city属性的值,并进行了输出。

案例代码:

csharp

using MongoDB.Driver;

using MongoDB.Bson;

using System;

class Program

{

static void MAIn(string[] args)

{

var client = new MongoClient("MongoDB://localhost:27017");

var Database = client.GetDatabase("test");

var collection = Database.Getcollection<BsonDocument>("users");

var filter = Builders<BsonDocument>.Filter.Empty;

var projection = Builders<BsonDocument>.Projection.Include("addresses.city");

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

foreach (var document in result)

{

var addresses = document["addresses"].AsBsonArray;

foreach (var address in addresses)

{

var city = address["city"].AsString;

Console.WriteLine(city);

}

}

}

}

以上就是使用MongoDB C#驱动程序查询子文档数组属性的简单示例。通过使用Builders类构建过滤器和投影,我们可以轻松地查询子文档数组中的特定属性,并满足我们的业务需求。

举报有用(4分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号