使用c#查询mongodb文档字段值
Posted
技术标签:
【中文标题】使用c#查询mongodb文档字段值【英文标题】:use c# query mongodb document field values 【发布时间】:2017-09-13 09:29:56 【问题描述】:在我的 C# 控制台应用程序项目中,我使用 MongoDB.Driver.2.4.3 并连接到 MongoDB 3.2.10。
我收集了一些文档,我使用以下代码将其输出到控制台:
"_id" : ObjectId("58f034bf5c57ef10bc4f8d3d"), "firstname" : "Christano", "birthdate" : ISODate("1995-04-14T02:32:31Z"), "country" : "Brazil" “_id”:ObjectId(“58f0c7bb5c57ef10bc506216”),“名字”:“贝利”,“生日”:ISODate(“2007-05-14T02:32:31Z”),“国家”:“巴西” “_id”:ObjectId(“58f0ca995c57ef10bc506763”),“名字”:“安东尼”,“生日”:ISODate(“2010-04-14T02:32:31Z”),“国家”:“意大利”
如何将各个字段值写入控制台,以便单独存储和操作这些值?
using MongoDB.Bson;
using MongoDB.Driver;
var playerfirstname;
var playerbirthdate;
var playercountry;
var client = new MongoClient("mongodb://localhost:27017");
var DB = client.GetDatabase("football");
var collection = DB.GetCollection<BsonDocument>("players");
var filter = Builders<BsonDocument>.Filter.Eq("country", "Brazil");
var cursor = collection.Find(filter).ToCursor();
foreach (var document in cursor.ToEnumerable())
Console.WriteLine(document);
【问题讨论】:
【参考方案1】:你应该像下面这样定义一个类
internal class Player
public ObjectId Id get; set;
public string FirstName get; set;
public DateTime BirthDate get; set;
public string Country get; set;
然后改变集合类型如下:
var players = DB.GetCollection<Player>("players");
然后仅应用 LINQ,您可以过滤掉所有国家/地区不是巴西的玩家,并访问每个玩家的属性,如下所示:
var playersInBrazil = players.AsQueryable()
.Where(player => player.Country == "Brazil");
foreach(var playerInBrazil in playersInBrazil)
Console.WriteLine(playerInBrazil.FirstName);
【讨论】:
我收到错误 CS1061 'IMongoCollectionCountry
应该在我们传递给 Where
方法的 lambda 表达式中重命名为 country
。以上是关于使用c#查询mongodb文档字段值的主要内容,如果未能解决你的问题,请参考以下文章
Mongodb:使用字段值进行查询,但也是另一个未知的唯一字段