【问题标题】:Is it Possible to Select Specfiic Fields from a Randomly Retrieved BsonDocument?是否可以从随机检索的 BsonDocument 中选择特定字段?
【发布时间】:2019-02-02 19:32:34
【问题描述】:

我正在使用以下代码从 MongoDB 数据库中检索随机文档(客户端、数据库和集合参数已被有意更改)。

[HttpGet]
public ActionResult<BsonDocument> Get()
{
    var client = new MongoClient(CLIENT);
    var database = client.GetDatabase(DATABASE);
    var collection = database.GetCollection<BsonDocument>(COLLECTION);


    var document = collection.AsQueryable().Sample(1).First();

    Response.ContentType = "application/json";

    return document;
}

[{"name":"_id","value":"5c4f2f7b9914ed3a4b8a9b8f"},{"name":"id","value":3470264},{"name":"coord","value" :[{"name":"lon","value":-48.479172},{"name":"lat","value":-20.94944}]},{"name":"country","value" :"BR"},{"name":"geoname","value":[{"name":"cl","value":"P"},{"name":"code","value" :"PPL"},{"name":"parent","value":3448433}]},{"name":"langs","value":[[{"name":"link","value ":"http://en.wikipedia.org/wiki/Bebedouro"}]]},{"name":"name","value":"Bebedouro"},{"name":"stat","value":[{"name":" level","value":1.0},{"name":"population","value":71862}]},{"name":"stations","value":[[{"name":"id ","value":4566},{"name":"dist","value":76},{"name":"kf","value":1}]]},{"name":"缩放","值":9}]

但是,由于某些记录包含的字段比其他记录多,我想选择特定的两个进行进一步处理。使用上面的结果,这些将是:

{"name":"country","value":"BR"} {"name":"name","value":"Bebedouro"}

有没有办法做到这一点?

【问题讨论】:

  • 澄清:您说数据库信息已更改。但是结构是一样的,是吗?您上面的示例表明,具有键/值对的普通文档已转换为键名/值元组数组。您能否在您的收藏中执行 findOne() 并将其发布为您希望从中提取 2 个字段的文档示例?
  • 对造成的误解深表歉意,我的意思是为了这篇文章的目的而更改了客户端、数据库和集合参数。同时,我正在尝试使用 FindOne() 函数并被提示错误“'IMongoCollection'不包含'FindOne'的定义并且没有可访问的扩展方法'FindOne'接受第一个参数类型 'IMongoCollection' 可以找到”。此外,之前发布的结果是原始数据格式。
  • 在 mongo shell 中,执行以下操作: db.nameOfYourCollection.findOne();编辑您不希望我们看到和发布的内容。

标签: c# asp.net mongodb


【解决方案1】:

经过一番思考,我找到了解决问题的方法。

1) 方法的结果改为元组。
2) 检索城市和国家两个字段的值并转换为字符串。
3) 这两个值被添加到一个元组中。

[HttpGet]
public ActionResult<Tuple<string, string>> Get()
{
    var client = new MongoClient(CLIENT);
    var database = client.GetDatabase(DATABASE);
    var collection = database.GetCollection<BsonDocument>(COLLECTION);

    var document = collection.AsQueryable().Sample(1).First();

    var city = document.GetValue("name").ToString();
    var country = document.GetValue("country").ToString();

    Tuple<string, string> result = new Tuple<string, string>(city, country);

    Response.ContentType = "application/json";

    return result;
}

结果如下。

{"item1":"莱克伍德","item2":"US"}

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多