使用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 'IMongoCollection' 不包含 'Where' 的定义,并且没有扩展方法 'Where' 接受类型为 'IMongoCollection' 可以找到(您是否缺少 using 指令或程序集引用?) 严重性代码说明项目文件行抑制状态错误 CS1579 foreach 语句无法对“?”类型的变量进行操作因为 '?'不包含“GetEnumerator”ConsoleApp1 的公共定义 @ikask 请检查我的更新并告诉我。谢谢 现在我得到了.. 错误 CS1061 'Program.Player' 不包含 'Country' 的定义,并且没有扩展方法 'Country' 接受类型为 'Program.Player' 的第一个参数被发现(您是否缺少 using 指令或程序集引用?) @ikask Country 应该在我们传递给 Where 方法的 lambda 表达式中重命名为 country

以上是关于使用c#查询mongodb文档字段值的主要内容,如果未能解决你的问题,请参考以下文章

求助啊,tp下,mongodb如何查询后只返回某个字段值

Mongodb:使用字段值进行查询,但也是另一个未知的唯一字段

c#操作mongodb部分更新实体字段问题,求助高手

我可以对索引子文档字段执行 MongoDB“开始于”查询吗?

mongoDB 索引

MongoDB索引