# MongoDBReplicaSetBuilderExtensions Methods

- Package: [Aspire.Hosting.MongoDB](/reference/api/csharp/aspire.hosting.mongodb.md)
- Type: [MongoDBReplicaSetBuilderExtensions](/reference/api/csharp/aspire.hosting.mongodb/mongodbreplicasetbuilderextensions.md)
- Kind: `Methods`
- Members: `2`

Provides extension methods for adding MongoDB resources to an `Hosting.IDistributedApplicationBuilder`.

<a id="addmongodbreplicaset"></a>
<a id="addmongodbreplicaset-idistributedapplicationbuilder-string-iresourcebuilder-parameterresource-iresourcebuilder-parameterresource"></a>

## AddMongoDBReplicaSet(IDistributedApplicationBuilder, string, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)

- Name: `AddMongoDBReplicaSet(IDistributedApplicationBuilder, string, IResourceBuilder<ParameterResource>, IResourceBuilder<ParameterResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<MongoDBReplicaSetResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/f4c27f2d43ddc1cacd0dd083b30d1fea1cee7a62/src/Aspire.Hosting.MongoDB/ReplicaSet/MongoDBReplicaSetBuilderExtensions.cs#L69-L372)

Adds a MongoDB replica set resource to the application model.

```csharp
public static class MongoDBReplicaSetBuilderExtensions
{
    public static IResourceBuilder<MongoDBReplicaSetResource> AddMongoDBReplicaSet(
        this IDistributedApplicationBuilder builder,
        string name,
        IResourceBuilder<ParameterResource>? userName = null,
        IResourceBuilder<ParameterResource>? password = null)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IDistributedApplicationBuilder`)
  The `Hosting.IDistributedApplicationBuilder` to which the replica set resource will be added.
- `name` (`string`)
  The name of the replica set resource.
- `userName` (`IResourceBuilder<ParameterResource>`) `optional`
  An optional parameter resource that contains the username for authenticating to the MongoDB replica set. If not provided, a default username will be used.
- `password` (`IResourceBuilder<ParameterResource>`) `optional`
  An optional parameter resource that contains the password for authenticating to the MongoDB replica set. If not provided, a default password will be used.

## Returns

`IResourceBuilder<MongoDBReplicaSetResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1`.

## Remarks

This is a "logical" resource that groups multiple [MongoDBServerResource](/reference/api/csharp/aspire.hosting.mongodb/mongodbserverresource.md) instances that are annotated as members of the replica set.

The replica set is initialized by the AppHost itself, which is something that only happens when running locally. Publishing and deploying an application that contains a MongoDB replica set is therefore not supported yet and this method throws when the AppHost runs in publish mode.

```csharp
var mongo1 = builder.AddMongoDB("mongo-1");
var mongo2 = builder.AddMongoDB("mongo-2");

var replicaSet = builder.AddMongoDBReplicaSet("rs0")
    .WithMember(mongo1)
    .WithMember(mongo2);
```

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.

<a id="withmember"></a>
<a id="withmember-iresourcebuilder-mongodbreplicasetresource-iresourcebuilder-mongodbserverresource"></a>

## WithMember(IResourceBuilder<MongoDBReplicaSetResource>, IResourceBuilder<MongoDBServerResource>)

- Name: `WithMember(IResourceBuilder<MongoDBReplicaSetResource>, IResourceBuilder<MongoDBServerResource>)`
- Modifiers: `extension`
- Returns: `IResourceBuilder<MongoDBReplicaSetResource>`
- Source: [GitHub](https://github.com/microsoft/aspire/blob/f4c27f2d43ddc1cacd0dd083b30d1fea1cee7a62/src/Aspire.Hosting.MongoDB/ReplicaSet/MongoDBReplicaSetBuilderExtensions.cs#L400-L551)

Adds a MongoDB server resource as a member of the replica set.

```csharp
public static class MongoDBReplicaSetBuilderExtensions
{
    public static IResourceBuilder<MongoDBReplicaSetResource> WithMember(
        this IResourceBuilder<MongoDBReplicaSetResource> builder,
        IResourceBuilder<MongoDBServerResource> member)
    {
        // ...
    }
}
```

## Parameters

- `builder` (`IResourceBuilder<MongoDBReplicaSetResource>`)
  The `ApplicationModel.IResourceBuilder`1` to which the member will be added.
- `member` (`IResourceBuilder<MongoDBServerResource>`)
  The MongoDB server resource that represents the member to add to this replica set.

## Returns

`IResourceBuilder<MongoDBReplicaSetResource>` -- A reference to the `ApplicationModel.IResourceBuilder`1`.

## Remarks

Internally calls the following methods on the member's builder:

1. Configures the member's replica set name and command-line arguments without initializing a separate single-member set. Do not call [MongoDBBuilderExtensions.WithReplicaSet(IResourceBuilder<MongoDBServerResource>, string?)](/reference/api/csharp/aspire.hosting.mongodb/mongodbbuilderextensions/methods.md#withreplicaset-iresourcebuilder-mongodbserverresource-string) on these members.
2. [MongoDBBuilderExtensions.WithKeyFile(IResourceBuilder<MongoDBServerResource>, IExpressionValue, string)](/reference/api/csharp/aspire.hosting.mongodb/mongodbbuilderextensions/methods.md#withkeyfile-iresourcebuilder-mongodbserverresource-iexpressionvalue-string) to set the key file parameter on the member resource, which is required for internal authentication between replica set members.
3. [MongoDBBuilderExtensions.WithTlsAllowInvalidCertificates(IResourceBuilder<MongoDBServerResource>)](/reference/api/csharp/aspire.hosting.mongodb/mongodbbuilderextensions/methods.md#withtlsallowinvalidcertificates-iresourcebuilder-mongodbserverresource) because members authenticate to each other with the same certificate they serve to clients, which does not carry a `clientAuth` extended key usage.
4. `ResourceBuilderExtensions.WithHttpsDeveloperCertificate`, unless the member already has certificate configuration of its own. TLS is required for members of a replica set, because the split-horizon member hostname advertisement performed by the server operates on top of SNI.

## ATS metadata

### ATS export

- Available to Polyglot AppHosts through the Aspire Type System.
