Can't deserialize from ObjectId to String in a MongoDb collection query

General Tech Bugs & Fixes 3 years ago

2.49K 2 0 0 0

User submissions are the sole responsibility of contributors, with TuteeHUB disclaiming liability for accuracy, copyrights, or consequences of use; content is for informational purposes only and not professional advice.

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 3 years ago

Whenever I am trying to get a list of Ids from a collection:

var messages = db.GetCollection<MessageExchange>(collectionName);
var ids = messages
   .AsQueryable()
   .Where(_=> true)
   .Select(x => x.Id)
   .ToList();

I am getting a cast error:

System.FormatException HResult=0x80131537 Message=Cannot deserialize a 'String' from BsonType 'ObjectId'. Source= StackTrace:

I am not able to modify the definition of a class, because its implemented in a package I can't change. Therefore the solution of putting:

[BsonRepresentation(BsonType.ObjectId)] 

on it, is not possible. Based on this.

Is it possible to cast this in the Linq query?

0 views
0 shares

profilepic.png
manpreet 3 years ago

No, because db.GetCollection defines the collection as strongly typed objects which the driver will process in combination with any further logic that is carried out (using linq or otherwise).

Your best options would be either:

  1. Define a class which is compatible with your Mongo Collection in your own code, then use that class to deserialise your results db.GetCollection which you can then use with your linq query above to select just the ids.

  2. Just use the default BsonDocument to define your collection and use a projection: db.GetCollection.Find(new BsonDocument()).Project("{_id: 1}").ToList()


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHUB will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.

Similar Forum