C# 使用C检索MongoDB文档并选择一个字段

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.

我在ASP.NETCore中使用C从MongoDB Atlas集合中检索随机文档,提取特定字段名并将其添加到web服务响应中

因为这对我来说是第一次,所以我研究了几种解决方案,其中大多数都是在这些论坛上提出的,但是这个领域没有被检索到

事情是这样的

请注意,为了本帖的目的,数据库的详细信息已被替换

1在为提取字段而创建的方法中,我在定义投影并返回结果之前检索了一个随机文档

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" }
}