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

发布于 2024-11-25 03:38:20 字数 824 浏览 0 评论 0原文

我在我的测试项目中使用 C# 的官方 mongodb 驱动程序,并且我已经将文档从 C# Web 应用程序插入到 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();
}

有人可以帮我吗?谢谢!

I'm using official mongodb driver for c# in my test project and i've already insert document from c# web application to mongodb. In mongo console, db.blog.find() can display entries I've inserted. but when i tried to retrieve them, .net throw a exception

"System.InvalidOperationException: ReadString can only be called when CurrentBsonType is String, not when CurrentBsonType is ObjectId."

my entity class is very simple

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

        public String Title
        {
            get;
            set;
        }
    }
}

and this is my retrieve code

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

can anybody help me out? thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

南烟 2024-12-02 03:38:20

我想您只需要使用 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();

I suppose you just need mark your blog Id with BsonId (and insert id yourself) attribute:

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

    public String Title{get;set;}
}

And all should be okay. Issue was because you not marked what field will be Mongodb _id and driver generated _id field with type ObjectId. And when driver trying deserialize it back he can't convert ObjectId to String.

Complete example:

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();
梦途 2024-12-02 03:38:20

推出数据

  1. 使用 C# 从 MongoDB 检索数据非常简单,可以通过三种不同的方式为前端列表
  2. 游标
  3. linq

    using (varcursor =await col.Find(new BsonDocument()).ToCursorAsync())
    {
     while(等待光标。MoveNextAsync())
     {
        foreach(cursor.Current 中的 var doc)
        {
            Console.WriteLine(doc);
        }
      }
    }
    

上述代码显示使用游标检索数据。
参考

Retrieving the data from the MongoDB using C# is pretty simple and there are three different ways the data can be rolled out for frontend

  1. List
  2. Cursor
  3. linq

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

the above code Shows to retrieve the data using cursors.
Referrence

一枫情书 2024-12-02 03:38:20

看看我在 github 上的示例项目。最近,我对 MongoDB 变得非常感兴趣。这个应用程序显示了许多您可能也会感兴趣的有用的东西; MongoDB 的存储库模式。

Take a look at my sample project at github. Off late, I've become really interested in MongoDB. This application shows many useful things that might interest you as well; repository pattern with MongoDB.

遥远的绿洲 2024-12-02 03:38:20

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

public ObjectId Id { get; set; }

其中 ObjectId 位于命名空间 MongoDB.Bson

The type and name of the id member should be different as follows

public ObjectId Id { get; set; }

Where ObjectId is in the namespace MongoDB.Bson

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文