C# 如何从Bson文档中获取值列表?
我在一个Json文档中进行解析,该文档使用。但我不知道如何从Bson文档中检索国家列表 我逐步完成了解析代码,所有的值都被解析到CountryModel中。然后存储在返回的C# 如何从Bson文档中获取值列表?,c#,json,list,mongodb-.net-driver,bson,C#,Json,List,Mongodb .net Driver,Bson,我在一个Json文档中进行解析,该文档使用。但我不知道如何从Bson文档中检索国家列表 我逐步完成了解析代码,所有的值都被解析到CountryModel中。然后存储在返回的集合var中 谷歌带来了我,但它只显示了如何按ID返回记录,而不是完整的列表。我想知道这里是否可以使用Lambda重载来查找列表 到目前为止,我已成功检索到完整的文档,并将其分配到列表: countries = collection.Find(new BsonDocument()).ToListAsync().GetAwait
集合
var中
谷歌带来了我,但它只显示了如何按ID返回记录,而不是完整的列表。我想知道这里是否可以使用Lambda重载来查找列表
到目前为止,我已成功检索到完整的文档,并将其分配到列表:
countries = collection.Find(new BsonDocument()).ToListAsync().GetAwaiter().GetResult();
有人知道我如何只取列表
而不是整个文档吗
检索数据涉及的两种主要方法如下:
public void LoadDb()
{
var collection = StartConnection();
countries = collection.Find(new BsonDocument()).ToListAsync().GetAwaiter().GetResult();
}
public IMongoCollection<CountryModel> StartConnection()
{
var client = new MongoClient(connectionString);
var database = client.GetDatabase("orders");
//Get a handle on the countries collection:
var collection = database.GetCollection<CountryModel>("countries");
return collection;
}
这是支持POCO的类,CountryModel
:
namespace MongoDBApp.Models
{
[ImplementPropertyChanged]
public class CountryModel
{
[BsonId]
public ObjectId Id { get; set; }
[BsonElement("countries")]
public List<Country> countries { get; set; }
}
[ImplementPropertyChanged]
public class Country
{
[BsonElement("name")]
public string Name { get; set; }
[BsonElement("code")]
public string Code { get; set; }
}
}
名称空间mongodbap.Models
{
[实现属性更改]
公共类模型
{
[BsonId]
公共对象Id{get;set;}
[b单一元素(“国家”)]
公共列表国家{get;set;}
}
[实现属性更改]
公营国家
{
[b单一元素(“名称”)]
公共字符串名称{get;set;}
[b单一元素(“代码”)]
公共字符串代码{get;set;}
}
}
尝试投影:
var result = await collection.Find(x => x.Id == {ObjectId}).Project(x => x.countries).FirstOrDefaultAsync();
其中{ObjectId}是要从中获取countries集合的CountryModel的id
顺便说一句:使用ObjectId
有更方便的方法。您可以在模型中放置字符串
,并添加属性:
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
然后您可以在字符串中使用Id为的查找:
collection.Find(x => x.Id == "sample_object_id")
因此,我尝试了以下操作,但设置断点时结果为空:var result=await collection.Find(x=>x.CountryObjectName==“countryObjName”).Project(x=>x.Countries).FirstOrDefaultAsync();countryList=结果;有什么想法吗?看来你把CountryObjectName添加到了CountryModel中,对吗?您确定数据库中存在具有预期名称的CountryModel吗?您可以使用命令db.CountryModel.find({CountryObjectName:“countryObjName”})或使用ok之类的工具从mongo shell进行检查,以便“countryObjName”必须等于我的db中该字段的字符串值?我以为它只是一个占位符值。这是实际的字符串值“CountryListObject”。我将尝试更改为该值并报告。是的,字符串“countryObjName”应替换为包含国家列表的CountryModel的真实名称,好的,然后我将结果分配给一个列表,但是当我返回结果并尝试使用此扩展方法转换为一个可观察的集合时,我不能,因为现在这是一项任务。你知道如何修改我当前的扩展方法以接受该类型吗?您是否希望在一个数组中返回所有文档中的国家/地区子文档?我希望以列表或数组的形式返回国家/地区子文档中的所有国家/地区。
collection.Find(x => x.Id == "sample_object_id")