Manisha P
Manisha P

Reputation: 111

MongoDb Projection in C#

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 loop show me an error as cannot convert type MongoDb.Bson.BsonDocument to mongodbconnect.Book. What should i change?

Upvotes: 3

Views: 8524

Answers (3)

Liang
Liang

Reputation: 937

Or you can convert Projection to Projection<T,T>

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();

Upvotes: 3

Manisha P
Manisha P

Reputation: 111

This Works

       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);

        }

Upvotes: 0

mickl
mickl

Reputation: 49975

You can use BsonSerializer class to convert your BsonDocument which is a result of your custom projection into a Book class. Since your _id is an integer, in C# you'll get default value for int which is 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));

Upvotes: 4

Related Questions