2017-04-17 128 views
1

在我的C#控制台应用程序项目中,我使用MongoDB.Driver.2.4.3连接到MongoDB 3.2.10。使用c#查询mongodb文档字段值

我在收集的文件,我的输出与下面的代码来安慰:

{ “_id”:物件( “58f034bf5c57ef10bc4f8d3d”), “名字”: “Christano”, “出生日期”:ISODate(”国家“:”巴西“} {”_id“:ObjectId(”58f0c7bb5c57ef10bc506216“),”firstname“:”Pele“,”birthdate“:ISODate(”2007- 05-14T02:32:31Z“),”country“:”Brazil“} {”_id“:ObjectId(”58f0ca995c57ef10bc506763“),”firstname“:”Anthony“,”birthdate“:ISODate(” “国家”:“意大利”}

如何将各个字段的值写入控制台,以便我c一个商店和个人操纵这些价值?

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); 
} 
+0

我收到错误\t CS1061 \t'IMongoCollection '未包含'Where'的定义,也没有扩展方法'Where'接受类型为'IMongoCollection '的第一个参数找到(是否缺少using指令或程序集引用?) – ikask

+0

严重\t代码\t说明\t项目\t文件\t线\t抑制状态 错误\t CS1579 \t foreach语句不能对类型的变量操作“?”因为'?'不包含'GetEnumerator'的公开定义\t ConsoleApp1 – ikask

+0

@ikask请检查我的更新并让我知道。谢谢 – Christos