Home > Blockchain >  How can I read just one field in MongoDB C#?
How can I read just one field in MongoDB C#?

Time:07-13

Im trying to read just one field from the MongoDB with a given ID, but its giving me all the object... How can I do it ? What should I do? I tried with this repository but its returning me all the object

Here is my class:

public class Hall
{
  [BsonId]
  [BsonRepresentation(BsonType.ObjectId)]
  public string Id { get; set; }
  public string Name { get; set; }
  public List<string> Surveys { get; set; }
}

And here is my repository with the connection to Mongo:

public Task<List<Hall>> ReadSurveysHall(string hallId)
{
  var filter = Builders<Hall>.Filter.(x => x.Id, hallId);
  return _mongoManager.Find(filter, MongoConstants.HallCollection);
}

I just want it to give me just the list of Survey's string. Thank you in advance.

CodePudding user response:

In order to return only the list of surveys, you can change your method like this:

public async Task<List<string>> ReadSurveysHall(string hallId)
{
  var filter = Builders<Hall>.Filter.(x => x.Id, hallId);
  var halls = await _mongoManager.Find(filter, MongoConstants.HallCollection);
  var hall = halls.FirstOrDefault();
  if (hall == null)
    return new List<string>();
  return hall.Surveys;
}

You can further optimize this by using a projection so that MongoDB only delivers the data that you are interested in, e.g.:

var projection = Builders<Hall>.Projection.Exclude(x => x.Id).Include(x => x.Surveys);
var options = new FindOptions<Hall, Hall>() 
{
  Projection = projection,
};

How you use that projection depends on the capabilities of _mongoManager. Take a look at the Find methods and check whether any of these accepts a projection or some kind of FindOptions as a parameter.

  • Related