Reputation: 111
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
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
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
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