【发布时间】: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();编辑您不希望我们看到和发布的内容。