如何使用 C# mongoDB 搜索和获取子文档

问题描述 投票:0回答:0

我在各省收集的数据是这样的:

{
  "_id": {
    "$oid": "63dc7ff82e7e5e91c0f1cd87"
  },
  "province": "province1",
  "districts": [
    {
      "district": "district1",
      "sub_districts": [
        {
          "sub_district": "sub_district1",
          "zip_codes": [
            "zip_code1"
          ]
        },
        {
          "sub_district": "sub_district2",
          "zip_codes": [
            "zip_code2"
          ]
        },
      ],
    },
  ],
}

这就是我现在如何获得 sub_district 列表的方式: - 我使用 Builders.Filter 搜索省份。 - 使用 foreach 获取地区数组(在省集合中)并使用 if 语句检查地区是否等于 searchDistrict。 - 获取该地区的 sub_districts 数组。 源代码:

public static List<string> MongoDbSelectSubDistrict(string searchProvince, string searchDistrict)
{
    List<string> subDistrictList = new List<string>();
    try
    {
        var provincesCollection = _db.GetCollection<BsonDocument>("provinces");
        var builder = Builders<BsonDocument>.Filter;
        var filter = builder.Empty;

        if (searchProvince != "")
        {
            var provinceFilter = Builders<BsonDocument>.Filter.Eq("province", searchProvince);
            filter &= provinceFilter;
        }
        /*
        //***Need to be revised***
        if (searchDistrict != "")
        {
            var districtFilter = Builders<BsonDocument>.Filter.Eq("provinces.district", searchDistrict);
            filter &= districtFilter;
        }
        */

        var queryProvinces = provincesCollection.Find(filter).ToList();
        foreach (BsonDocument queryProvince in queryProvinces)
        {
            BsonArray districtArray = queryProvince.GetValue("districts").AsBsonArray;
            foreach (BsonDocument districtDocument in districtArray)
            {
                string district = districtDocument.GetValue("district").ToString();
                if (district == searchDistrict) //***Need to be revised***
                {
                    BsonArray subDistrictArray = districtDocument.GetValue("sub_districts").AsBsonArray;
                    foreach (BsonDocument subDistrictDocument in subDistrictArray)
                    {
                        string subDistrict = subDistrictDocument.GetValue("sub_district").ToString();
                        subDistrictList.Add(subDistrict);
                    }
                }
            }
        }
    }
    catch (TimeoutException ex)
    {
        
    }
    return subDistrictList;
}

有什么有效的方法吗?

这就是我想要的:

[
    {
      "sub_district": "sub_district1",
      "zip_codes": [
        "zip_code1"
      ]
    },
    {
      "sub_district": "sub_district2",
      "zip_codes": [
        "zip_code2"
      ]
    },
]

还有一个问题:如果我想在集合中搜索 sub_district,我如何在不循环 sub_districts 数组的情况下得到它?

c# mongodb mongodb-query mongodb-.net-driver
© www.soinside.com 2019 - 2024. All rights reserved.