如何从 Bson 文档中获取值列表?
How to fetch a list of values from a Bson document?
我正在解析 Json 文档,该文档存储 <Country>
类型的列表(包含 name
和 code
),使用 MongoDB.Net driver.但我不确定如何从 Bson 文档中检索国家列表。
我逐步完成了解析代码,所有值都被解析到 CountryModel 中。然后存储在 returned collection
变量中。
谷歌搜索让我 this solution 但它只显示了如何 return 按 ID 的记录而不是完整的列表。我想知道是否可以在此处使用 Lambda 重载来查找列表。
到目前为止,我已经设法检索到完整的文档,并将其分配到一个列表中:
countries = collection.Find(new BsonDocument()).ToListAsync().GetAwaiter().GetResult();
有谁知道我如何只获取 List<Country>
而不是整个文档?
检索数据涉及的两个主要方法如下:
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;
}
这是 Json 中解析的数据示例:
{
"_id": {
"$oid": "565f5d3ae4b0ed465284d17a"
},
"countries": [
{
"name": "Afghanistan",
"code": "AF"
},
{
"name": "Antigua and Barbuda",
"code": "AG"
}
]
}
这是支持 POCO class, 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; }
}
}
尝试投影:
var result = await collection.Find(x => x.Id == {ObjectId}).Project(x => x.countries).FirstOrDefaultAsync();
其中 {ObjectId} 是您要从中获取国家/地区集合的 CountryModel 的 ID。
顺便说一句:使用 ObjectId
有更方便的方法。您可以在模型中放置 string
并添加属性:
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
然后你可以使用 Find
with Id in string
:
collection.Find(x => x.Id == "sample_object_id")
我正在解析 Json 文档,该文档存储 <Country>
类型的列表(包含 name
和 code
),使用 MongoDB.Net driver.但我不确定如何从 Bson 文档中检索国家列表。
我逐步完成了解析代码,所有值都被解析到 CountryModel 中。然后存储在 returned collection
变量中。
谷歌搜索让我 this solution 但它只显示了如何 return 按 ID 的记录而不是完整的列表。我想知道是否可以在此处使用 Lambda 重载来查找列表。
到目前为止,我已经设法检索到完整的文档,并将其分配到一个列表中:
countries = collection.Find(new BsonDocument()).ToListAsync().GetAwaiter().GetResult();
有谁知道我如何只获取 List<Country>
而不是整个文档?
检索数据涉及的两个主要方法如下:
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;
}
这是 Json 中解析的数据示例:
{
"_id": {
"$oid": "565f5d3ae4b0ed465284d17a"
},
"countries": [
{
"name": "Afghanistan",
"code": "AF"
},
{
"name": "Antigua and Barbuda",
"code": "AG"
}
]
}
这是支持 POCO class, 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; }
}
}
尝试投影:
var result = await collection.Find(x => x.Id == {ObjectId}).Project(x => x.countries).FirstOrDefaultAsync();
其中 {ObjectId} 是您要从中获取国家/地区集合的 CountryModel 的 ID。
顺便说一句:使用 ObjectId
有更方便的方法。您可以在模型中放置 string
并添加属性:
[BsonId]
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
然后你可以使用 Find
with Id in string
:
collection.Find(x => x.Id == "sample_object_id")