首页 文章

使用C#驱动程序从mongodb检索数据

提问于
浏览
9

我在我的测试项目中使用官方mongodb驱动程序用于c#,我已经将文件从c#web应用程序插入mongodb . 在mongo控制台中,db.blog.find()可以显示我插入的条目 . 但是当我试图检索它们时,.net会抛出异常

"System.InvalidOperationException: ReadString can only be called when CurrentBsonType is String, not when CurrentBsonType is 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 回答

  • 1

    我想你只需要用 BsonId 标记你的博客ID(并自己插入id)属性:

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

    一切都应该没问题 . 问题是因为您没有标记Mongodb _id和驱动程序生成的带有ObjectId类型的_id字段的字段 . 当驱动程序尝试反序列化它时,他无法将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();
    
  • 0

    使用C#从MongoDB中检索数据非常简单,有三种不同的方法可以为前端推出数据

    • 列表

    • 光标

    • linq

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

    上面的代码显示使用游标检索数据 . Referrence

  • 10

    在github上看一下我的sample project . 最近,我对MongoDB真的很感兴趣 . 此应用程序显示了许多您可能感兴趣的有用的东西; MongoDB的存储库模式 .

  • 2

    id成员的类型和名称应该不同,如下所示

    public ObjectId Id { get; set; }
    

    ObjectId 在命名空间 MongoDB.Bson

相关问题