【问题标题】:MongoDb Projection in C#C# 中的 MongoDb 投影
【发布时间】:2021-06-23 10:17:47
【问题描述】:
namespace mongodbconnect
{
    public class Book
    {
        public int _id { get; set; }
        public string name { get; set; }
    }
    class Program
    {

        static void Main(string[] args)
        {
            var mongoDbClient = new MongoClient();
            var mydb = mongoDbClient.GetDatabase("mydb");
            var CBook = mydb.GetCollection<Book>("Book");    
            var x = CBook.Find(new BsonDocument()).Project(Builders<Book>.Projection.Include("name").Exclude("_id")).ToList();

            foreach(Book b in x)
            {

                Console.WriteLine(b._id);
                Console.WriteLine(b.name);
            }




            Console.WriteLine("End");
            Console.ReadLine();
         }
    }
}

foreach 循环向我显示一个错误,因为无法将类型 MongoDb.Bson.BsonDocument 转换为 mongodbconnect.Book。我应该改变什么?

【问题讨论】:

  • 您排除了 _id 并尝试打印 _id,只是想知道。请发布书籍类和一些数据

标签: c# mongodb bson


【解决方案1】:

您可以使用BsonSerializer 类将您的BsonDocument(自定义投影的结果)转换为Book 类。由于您的 _id 是一个整数,因此在 C# 中您将获得 int 的默认值 0

var CBook = mydb.GetCollection<Book>("book");
var x = CBook.Find<Book>(FilterDefinition<Book>.Empty)
             .Project(Builders<Book>.Projection.Exclude(book => book._id))
             .ToList()
             .Select(bson => BsonSerializer.Deserialize<Book>(bson));

【讨论】:

  • 如果这样做,我会同时获得 _id 和书籍类的名称。图书类定义: public class Book { public int _id { get;放; } 公共字符串名称 { 获取;放; } }
  • @ManishaPalanisamy,真的,很抱歉。试试我编辑的答案
【解决方案2】:

或者您可以将投影转换为投影

ProjectionDefinition<Book,Book> projection= Builders<Book>.Projection.Exclude(book => book._id);
var CBook = mydb.GetCollection<Book>("book");
var x = CBook.Find<Book>(FilterDefinition<Book>.Empty)
         .Project(projection)
         .ToList();

【讨论】:

    【解决方案3】:

    这个工程

           var x = CBook.Find(new 
            BsonDocument()).Project(Builders<Book>.Projection
           .Include("name").Exclude("_id")).ToList();
    
    
            foreach (BsonDocument b in x)
            {
                Console.WriteLine(BsonSerializer.Deserialize<Bookname>(b).name);
    
            }
    

    【讨论】:

      猜你喜欢
      • 2017-05-24
      • 2022-01-08
      • 2021-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多