C# 使用C检索MongoDB文档并选择一个字段
我在ASP.NETCore中使用C从MongoDB Atlas集合中检索随机文档,提取特定字段名并将其添加到web服务响应中 因为这对我来说是第一次,所以我研究了几种解决方案,其中大多数都是在这些论坛上提出的,但是这个领域没有被检索到 事情是这样的 请注意,为了本帖的目的,数据库的详细信息已被替换 1在为提取字段而创建的方法中,我在定义投影并返回结果之前检索了一个随机文档C# 使用C检索MongoDB文档并选择一个字段,c#,asp.net,mongodb,C#,Asp.net,Mongodb,我在ASP.NETCore中使用C从MongoDB Atlas集合中检索随机文档,提取特定字段名并将其添加到web服务响应中 因为这对我来说是第一次,所以我研究了几种解决方案,其中大多数都是在这些论坛上提出的,但是这个领域没有被检索到 事情是这样的 请注意,为了本帖的目的,数据库的详细信息已被替换 1在为提取字段而创建的方法中,我在定义投影并返回结果之前检索了一个随机文档 var client = new MongoClient("CLIENT"); var database = client.
var client = new MongoClient("CLIENT");
var database = client.GetDatabase("DATABASE");
var collection = database.GetCollection<BsonDocument>("COLLECTION");
var document = new BsonDocument(collection.AsQueryable().Sample(1).FirstOrDefault());
var projection = Builders<BsonDocument>.Projection.Include("name").Exclude("_id");
var result = collection.Find<BsonDocument>(document).Project(projection).ToString();
return result.name;
方法
var client = new MongoClient("CLIENT");
var database = client.GetDatabase("DATABASE");
var collection = database.GetCollection<BsonDocument>("COLLECTION");
var document = new BsonDocument(collection.AsQueryable().Sample(1).FirstOrDefault()).ToJson();
Document result = JsonConvert.DeserializeObject<Document>(document);
return result.name;
与
并注释掉下面的一行
Document result = JsonConvert.DeserializeObject<Document>(document);
结果又是相似的
城市:{\\ id\:对象id\5C4F2F839914ED3A4 B8AA95F\,\id\:
4900579\coord\:{\lon\:-89.05815900000003\lat\:
42.3200190000002}、\country\:\US\、\geoname\:{\cl\:\P\、\code\:\PPL\、\parent\:4916845}、\langs\:[{
\链接\:\\},
{\post\:\61111\}],\name\:\Loves Park\,\stat\:{
\级别\:1.0,\n人口\:23996},\n站点\:[{\id\:
974\dist\:43\kf\:1},{\id\:1005\dist\:13,
\kf\:1},{\id\:2989\dist\:33\kf\:1},{\id\:
3010\dist\:24\kf\:1},{\id\:9277\dist\:35,
\kf\:1},{\id\:27762\dist\:16\kf\:1},{\id\
:29682\dist\:49\kf\:1},{\id\:30211\dist\:45,
\kf\:1},{\id\:31051\dist\:42\kf\:1},{\id\
:31756\dist\:15\kf\:1},{\id\:32614\dist\:49,
\kf\:1},{\id\:32643\dist\:47\kf\:1},{\id\
:33291\dist\:12\kf\:1},{\id\:33712\dist\:36,
\kf\:1},{\id\:33902\dist\:38\kf\:1},{\id\
:33980\dist\:42\kf\:1},{\id\:34925\dist\:10,
\kf\:1}],\zoom\:12}
提前感谢您的建议。在第一次尝试动态方法时,您将混合Linq版本,而不是将结果用于混合的.Find版本。您可以使用完全Linq方法>
private string GetName()
{
var client = new MongoClient();
var database = client.GetDatabase("WorldCities");
var collection = database.GetCollection<BsonDocument>("cities");
return collection.AsQueryable().Sample(1).First().GetValue("name").ToString();
}
private string GetName()
{
var client = new MongoClient();
var database = client.GetDatabase("WorldCities");
var collection = database.GetCollection<BsonDocument>("cities");
var result = collection.Find(FilterDefinition<BsonDocument>.Empty)
.Project(Builders<BsonDocument>.Projection.Include("name").Exclude("_id")).First().ToString();
return result;
// { "name" : "les Escaldes" }
}
没问题。对于反序列化方法,文档的结构与数据库中的不同。您还可以使用bson引擎进行反序列化,并使用GetCollectionYou能否让我知道如何使用上述方法对列表进行排序。。。在发现之后。。。来定义您的订购要求。谢谢@ntohl。工作完美。无论如何都可以在两个数字之间选择值,即从t1中选择*,其中cl_名称介于1和10之间?
Document result = JsonConvert.DeserializeObject<Document>(document);
private string GetName()
{
var client = new MongoClient();
var database = client.GetDatabase("WorldCities");
var collection = database.GetCollection<BsonDocument>("cities");
return collection.AsQueryable().Sample(1).First().GetValue("name").ToString();
}
private string GetName()
{
var client = new MongoClient();
var database = client.GetDatabase("WorldCities");
var collection = database.GetCollection<BsonDocument>("cities");
var result = collection.Find(FilterDefinition<BsonDocument>.Empty)
.Project(Builders<BsonDocument>.Projection.Include("name").Exclude("_id")).First().ToString();
return result;
// { "name" : "les Escaldes" }
}