Получение данных из mongodb с помощью драйвера C#
Я использую официальный драйвер mongodb для c# в своем тестовом проекте, и я уже вставил документ из веб-приложения c# в mongodb. В консоли mongo, db.блог.find () может отображать вставленные мной записи. но когда я попытался их получить, .net бросил исключение
система".InvalidOperationException: ReadString может вызываться только тогда, когда CurrentBsonType является строкой, а не когда 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 ответов
Я полагаю, вам просто нужно отметить свой идентификатор блога с BsonId
(и вставьте id самостоятельно) атрибут:
public class Blog
{
[BsonId]
public String Id {get;set;}
public String Title{get;set;}
}
и все должно быть нормально. Проблема была в том, что вы не отметили, какое поле будет Mongodb _id и драйвер генерируется _id поле с типом ObjectId. И когда драйвер пытается десериализовать его обратно, он не может преобразовать ObjectId в строку.
пример:
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();
извлечение данных из MongoDB с помощью C# довольно просто, и есть три разных способа, которыми данные могут быть развернуты для frontend
- список
- курсор
-
linq
using (var cursor = await col.Find(new BsonDocument()).ToCursorAsync()) { while (await cursor.MoveNextAsync()) { foreach (var doc in cursor.Current) { Console.WriteLine(doc); } } }
приведенный выше код показывает, чтобы получить данные с помощью курсоров. справка
взгляните на мой пример проекта в github. Поздно, я действительно заинтересовался MongoDB. Это приложение показывает много полезных вещей, которые могут вас заинтересовать; шаблон репозитория с MongoDB.
тип и имя члена id должны отличаться следующим образом
public ObjectId Id { get; set; }
здесь ObjectId
в пространстве имен MongoDB.Bson