C# - Use projection to "bind model class" to specific collection node

Hello,

I’ve the following data structure:

"settings":

{
    _id: ObjectId('636e6724dec4d0de99d1ba25'),
    partnerASettings: {
        user: 'abcA',
        password: 'abcA@123',
        baseUri: 'https://abcA.com/v1/api'
    },
	partnerBSettings: {
        user: 'abcB',
        password: 'abcB@123',
        baseUri: 'https://abcB.com/v1/api'
    }
}

And I want to project only one of “sub-nodes” in C#, like:

db.settings.find({},{"partnerBSettings":1})

{
    "_id": {"$oid": "636e6724dec4d0de99d1ba25"},
    partnerBSettings: {       
       user: 'abcB',
       password: 'abcB@123',
       baseUri: 'https://abcB.com/v1/api'
    }
}

C# Model:

public class Settings
{
    public PartnerASettings PartnerASettings { get; set; }
    public PartnerBSettings PartnerBSettings { get; set; }
}

public class PartnerASettings
{
    public string BaseUri { get; set; }
    public string User { get; set; }
    public string Password { get; set; }
}

public class PartnerBSettings
{
    public string BaseUri { get; set; }
    public string User { get; set; }
    public string Password { get; set; }
}

I have a generic method to try select only the specific model from node document::

TSettings Select<TSettings>()
{
    var projection = Builders<Settings>.Projection.Include(/*???*/);

    var settings = _settingsCollection
		.Find(Builders<Settings>.Filter.Empty)
        .Project<TSettings>(projection)
        .FirstOrDefault();

    return settings;
}

But my doubt is how to .Project<T> to my “sub model”, like PartnerBSettings.cs. What Builders<Settings>.Projection I need? How can I specific it generically?

I wrote a method without “generics” and without specific model at .Project method:

PartnerBSettings Select()
{
    var settings = _settingsCollection
		.Find(Builders<Settings>.Filter.Empty)
        .Project(p => p.PartnerBSettings)
        .FirstOrDefault();
		
	return settings;
}

And I wrote a method specifying model at .Project<PartnerBSettings> method, but it using BsonDocument instantiation:

PartnerBSettings Select()
{
    var settings = _settings
	      .Aggregate()
          .Unwind("partnerBSettings")
          .Find(Builders<Settings>.Filter.Empty)
          .Project<PartnerBSettings>(new BsonDocument()
		  {
		  	{ "User", "$partnerBSettings.user" },
		  	{ "Password", "$partnerBSettings.password" },
		  	{ "BaseUri", "$partnerBSettings.baseUri" },
		  });
		
	return settings;
}

These above methods works, but I need a generic version. It’s possible make it without “specificate” model property or without instantiating classes “manually”?

Cheers!