2016-08-23 2 views
0

Мне нужно прочитать определенные поля в документах из Монго. Я отфильтровал документ, используя метод Filter.EQ(), но как я могу найти и сохранить поле в этом документе? Это мой код:Как читать Mongo Document и сохранять его в объекте?

public void human_radioButton_Checked(object sender, RoutedEventArgs e) 
    { 
     Upload human = new Upload(); //opens connection to the database and collection 

     var filter = Builders<BsonDocument>.Filter.Eq("name", "Human"); 
     race_desc description = new race_desc(); 
     description.desc = Convert.ToString(filter); 
     desc_textBox.Text = description.desc; 

Однако это не сработало, так как я не захватил ни одного поля, только документ. Итак, как я могу прочитать поле под названием 'A' и сохранить его в объекте?

Благодаря

ответ

3

При определении фильтра с помощью Builders<BsonDocument>.Filter здесь, вы просто определить фильтр, который вы можете использовать/выполнить в запросе. Очень похоже на сохранение строки SQL в строковой переменной.

Что вы пропустили здесь, это выполнение фильтра и фактическое извлечение данных. По Mongodb C# driver doc:

var collection = _database.GetCollection<BsonDocument>("restaurants"); 
var filter = Builders<BsonDocument>.Filter.Eq("borough", "Manhattan"); 
var result = await collection.Find(filter).ToListAsync(); 

Тогда можно перебирать результаты и получить доступ к свойствам, как

foreach(var result in results) 
{ 
    //do something here with result.your_property 
} 

И если вы просто хотите, чтобы первый из результата

var result = (await collection.Find(filter).ToListAsync()).FirstOrDefault(); 

Теперь, если вы хотите для литья BsonDocument вы получили свой собственный десериализационный документ класса с помощью BsonSerializer:

var myObj = BsonSerializer.Deserialize<YourType>(result); 

Вы также можете отобразить его на свой собственный класс:

var yourClass = new YourType(); 
yourClass.Stuff= result["Stuff"].ToString(); 
+0

Очень полезно! Вы знаете, есть ли способ инициализировать файл var «dynamicaly»? Мне нужно знать, есть ли способ инициировать его на разных фильтрах в зависимости от того, что я получаю от моего вызова – Gino