Получить данные из mongodb с помощью драйвера C # - PullRequest
9 голосов
/ 21 июля 2011

Я использую официальный драйвер mongodb для c # в своем тестовом проекте, и я уже вставил документ из веб-приложения c # в mongodb. В консоли mongo db.blog.find () может отображать записи, которые я вставил. но когда я пытался их получить, .net выдает исключение

"System.InvalidOperationException: ReadString может быть вызван только тогда, когда CurrentBsonType имеет значение String, а не когда CurrentBsonType имеет значение ObjectId."

мой класс сущностей очень прост

namespace MongoDBTest
{
    public class Blog
    {
        public String _id
        {
            get;
            set;
        }

        public String Title
        {
            get;
            set;
        }
    }
}

и это мой код извлечения

public List<Blog> List()
{
    MongoCollection collection = md.GetCollection<Blog>("blog");
    MongoCursor<Blog> cursor = collection.FindAllAs<Blog>();
    cursor.SetLimit(5);
    return cursor.ToList();
}

Кто-нибудь может мне помочь? спасибо!

Ответы [ 4 ]

10 голосов
/ 21 июля 2011

Полагаю, вам просто нужно пометить свой идентификатор блога атрибутом BsonId (и самим вставить идентификатор):

public class Blog
{
    [BsonId]
    public String Id {get;set;}

    public String Title{get;set;}
}

И все должно быть в порядке.Проблема заключалась в том, что вы не отметили, какое поле будет Mongodb _id, а драйвер сгенерировал поле _id с типом ObjectId.И когда драйвер пытается десериализовать его обратно, он не может преобразовать ObjectId в String.

Полный пример:

MongoCollection collection = md.GetCollection<Blog>("blog");
var blog = new Blog(){Id = ObjectId.GenerateNewId().ToString(), 
                      Title = "First Blog"};
collection .Insert(blog);

MongoCursor<Blog> cursor = collection.FindAllAs<Blog>();
cursor.SetLimit(5);

var list = cursor.ToList();
2 голосов
/ 16 июля 2015

Извлечение данных из MongoDB с использованием C # довольно простое, и существует три различных способа выкатывания данных для внешнего интерфейса

  1. Список
  2. Курсор
  3. linq

    using (var cursor = await col.Find(new BsonDocument()).ToCursorAsync())
    {
     while (await cursor.MoveNextAsync())
     {
        foreach (var doc in cursor.Current)
        {
            Console.WriteLine(doc);
        }
      }
    }
    

Приведенный выше код Показывает получение данных с использованием курсоров. Referrence

1 голос
/ 11 февраля 2014

Взгляните на мой пример проекта на github. Поздно поздно я действительно заинтересовался MongoDB. Это приложение показывает много полезных вещей, которые могут вас заинтересовать; шаблон репозитория с MongoDB.

0 голосов
/ 15 июня 2014

Тип и имя члена идентификатора должны отличаться следующим образом

public ObjectId Id { get; set; }

Где ObjectId находится в пространстве имен MongoDB.Bson

...