gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:20:38 24 4
gpt4 key购买 nike

我在 ASP.NET Core 中使用 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;

然而,结果如下。

{ "city":"find({ \"_id\" : ObjectId(\"5c4f2f7b9914ed3a4b8aa075\"), \"id\" : 3698105, \"coord\" : { \"lon\" : -80.162497999999999, \"lat\" : -5.0925000000000002 }, \"country\" : \"PE\", \"geoname\" : { \"cl\" : \"P\", \"code\" : \"PPL\", \"parent\" : 3693525 }, \"name\" : \"Chulucanas\", \"stat\" : { \"level\" : 1.0, \"population\" : 68835 }, \"zoom\" : 9 }, { \"name\" : 1, \"_id\" : 0 }



2)因此我试图解决这个问题。我省略了投影并尝试将文档转换为 JSON,将其映射到数据模型并选择所需的字符串。

数据模型
public class Document
{
public string _id { get; set; }
public int id { get; set; }
public string coord { get; set; }
public string country { get; set; }
public string geoname { get; set; }
public string langs { get; set; }
public string name { get; set; }
public string stat { get; set; }
public string stations { get; set; }
public int zoom { get; set; }
}

方法
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;

结果是一个空白屏幕和一个 Newtonsoft.Json>JsonReaderException。

为了调试这个,我替换了
return result.name


return document;

并注释掉以下行。
Document result = JsonConvert.DeserializeObject<Document>(document);

结果又是相似的。

"city":"{ \"_id\" : ObjectId(\"5c4f2f839914ed3a4b8aa95f\"), \"id\" : 4900579, \"coord\" : { \"lon\" : -89.058159000000003, \"lat\" : 42.320019000000002 }, \"country\" : \"US\", \"geoname\" : { \"cl\" : \"P\", \"code\" : \"PPL\", \"parent\" : 4916845 }, \"langs\" : [{ \"link\" : \"http://en.wikipedia.org/wiki/Loves_Park%2C_Illinois\" }, { \"post\" : \"61111\" }], \"name\" : \"Loves Park\", \"stat\" : { \"level\" : 1.0, \"population\" : 23996 }, \"stations\" : [{ \"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();
}

或满 .Find方法>
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" }
}

关于c# - 使用 C# 检索 MongoDB 文档并选择一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54437050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com