【问题标题】:use c# query mongodb document field values使用c#查询mongodb文档字段值
【发布时间】: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);
}

【问题讨论】:

    标签: c# mongodb


    【解决方案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
    猜你喜欢
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-11
    • 2015-02-10
    • 2017-01-27
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    相关资源
    最近更新 更多