Skip to content

Commit 4e3c66b

Browse files
committed
Various fixes
1 parent d15e736 commit 4e3c66b

File tree

7 files changed

+50
-17
lines changed

7 files changed

+50
-17
lines changed

src/MongoDB.Driver/ChangeStreamHelper.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ public static ChangeStreamOperation<TResult> CreateChangeStreamOperation<TResult
3232
bool retryRequested,
3333
ExpressionTranslationOptions translationOptions)
3434
{
35-
var renderedPipeline = RenderPipeline(pipeline, BsonDocumentSerializer.Instance, translationOptions);
35+
var serializationDomain = messageEncoderSettings.GetOrDefault<IBsonSerializationDomain>(MessageEncoderSettingsName.SerializationDomain, null);
36+
var renderedPipeline = RenderPipeline(pipeline, BsonDocumentSerializer.Instance, serializationDomain, translationOptions);
3637

3738
var operation = new ChangeStreamOperation<TResult>(
3839
renderedPipeline.Documents,
@@ -55,7 +56,8 @@ public static ChangeStreamOperation<TResult> CreateChangeStreamOperation<TResult
5556
bool retryRequested,
5657
ExpressionTranslationOptions translationOptions)
5758
{
58-
var renderedPipeline = RenderPipeline(pipeline, BsonDocumentSerializer.Instance, translationOptions);
59+
var serializationDomain = messageEncoderSettings.GetOrDefault<IBsonSerializationDomain>(MessageEncoderSettingsName.SerializationDomain, null);
60+
var renderedPipeline = RenderPipeline(pipeline, BsonDocumentSerializer.Instance, serializationDomain, translationOptions);
5961

6062
var operation = new ChangeStreamOperation<TResult>(
6163
database.DatabaseNamespace,
@@ -80,7 +82,8 @@ public static ChangeStreamOperation<TResult> CreateChangeStreamOperation<TResult
8082
bool retryRequested,
8183
ExpressionTranslationOptions translationOptions)
8284
{
83-
var renderedPipeline = RenderPipeline(pipeline, documentSerializer, translationOptions);
85+
var serializationDomain = messageEncoderSettings.GetOrDefault<IBsonSerializationDomain>(MessageEncoderSettingsName.SerializationDomain, null);
86+
var renderedPipeline = RenderPipeline(pipeline, documentSerializer, serializationDomain, translationOptions);
8487

8588
var operation = new ChangeStreamOperation<TResult>(
8689
collection.CollectionNamespace,
@@ -99,11 +102,11 @@ public static ChangeStreamOperation<TResult> CreateChangeStreamOperation<TResult
99102
private static RenderedPipelineDefinition<TResult> RenderPipeline<TResult, TDocument>(
100103
PipelineDefinition<ChangeStreamDocument<TDocument>, TResult> pipeline,
101104
IBsonSerializer<TDocument> documentSerializer,
105+
IBsonSerializationDomain serializationDomain,
102106
ExpressionTranslationOptions translationOptions)
103107
{
104108
var changeStreamDocumentSerializer = new ChangeStreamDocumentSerializer<TDocument>(documentSerializer);
105-
var serializerRegistry = BsonSerializer.SerializerRegistry;
106-
return pipeline.Render(new(changeStreamDocumentSerializer, serializerRegistry, translationOptions: translationOptions));
109+
return pipeline.Render(new(changeStreamDocumentSerializer, serializationDomain, translationOptions: translationOptions));
107110
}
108111

109112
private static void SetOperationOptions<TResult>(

src/MongoDB.Driver/FindFluent.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ private TRendered Render<TRendered>(Func<RenderArgs<TDocument>, TRendered> rende
282282
{
283283
var args = new RenderArgs<TDocument>(
284284
_collection.DocumentSerializer,
285-
_collection.Settings.SerializerRegistry,
285+
_collection.Settings.SerializationDomain,
286286
renderForFind: renderForFind,
287287
translationOptions: translationOptions);
288288

src/MongoDB.Driver/GridFS/GridFSBucket.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -675,7 +675,7 @@ private FindOperation<GridFSFileInfo<TFileId>> CreateFindOperation(
675675
{
676676
var filesCollectionNamespace = this.GetFilesCollectionNamespace();
677677
var messageEncoderSettings = this.GetMessageEncoderSettings();
678-
var args = new RenderArgs<GridFSFileInfo<TFileId>>(_fileInfoSerializer, _options.SerializerRegistry, translationOptions: translationOptions);
678+
var args = new RenderArgs<GridFSFileInfo<TFileId>>(_fileInfoSerializer, _database.Settings.SerializationDomain, translationOptions: translationOptions);
679679
var renderedFilter = filter.Render(args);
680680
var renderedSort = options.Sort == null ? null : options.Sort.Render(args);
681681

src/MongoDB.Driver/GridFS/GridFSBucketCompat.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,8 @@ public GridFSBucket(IMongoDatabase database, GridFSBucketOptions options = null)
120120
{
121121
Ensure.IsNotNull(filter, nameof(filter));
122122
var translationOptions = Database.Client.Settings.TranslationOptions;
123-
var wrappedFilter = WrapFilter(filter, translationOptions);
124-
var wrappedOptions = WrapFindOptions(options, translationOptions);
123+
var wrappedFilter = WrapFilter(filter, Database.Settings.SerializationDomain, translationOptions);
124+
var wrappedOptions = WrapFindOptions(options, Database.Settings.SerializationDomain, translationOptions);
125125
var cursor = base.Find(wrappedFilter, wrappedOptions, cancellationToken);
126126
return new BatchTransformingAsyncCursor<GridFSFileInfo<ObjectId>, GridFSFileInfo>(cursor, TransformFileInfos);
127127
}
@@ -131,8 +131,8 @@ public GridFSBucket(IMongoDatabase database, GridFSBucketOptions options = null)
131131
{
132132
Ensure.IsNotNull(filter, nameof(filter));
133133
var translationOptions = Database.Client.Settings.TranslationOptions;
134-
var wrappedFilter = WrapFilter(filter, translationOptions);
135-
var wrappedOptions = WrapFindOptions(options, translationOptions);
134+
var wrappedFilter = WrapFilter(filter, Database.Settings.SerializationDomain, translationOptions);
135+
var wrappedOptions = WrapFindOptions(options, Database.Settings.SerializationDomain, translationOptions);
136136
var cursor = await base.FindAsync(wrappedFilter, wrappedOptions, cancellationToken).ConfigureAwait(false);
137137
return new BatchTransformingAsyncCursor<GridFSFileInfo<ObjectId>, GridFSFileInfo>(cursor, TransformFileInfos);
138138
}
@@ -240,17 +240,17 @@ private IEnumerable<GridFSFileInfo> TransformFileInfos(IEnumerable<GridFSFileInf
240240
return fileInfos.Select(fi => new GridFSFileInfo(fi.BackingDocument));
241241
}
242242

243-
private FilterDefinition<GridFSFileInfo<ObjectId>> WrapFilter(FilterDefinition<GridFSFileInfo> filter, ExpressionTranslationOptions translationOptions)
243+
private FilterDefinition<GridFSFileInfo<ObjectId>> WrapFilter(FilterDefinition<GridFSFileInfo> filter, IBsonSerializationDomain serializationDomain, ExpressionTranslationOptions translationOptions)
244244
{
245-
var renderedFilter = filter.Render(new(GridFSFileInfoSerializer.Instance, BsonSerializer.SerializerRegistry, translationOptions: translationOptions));
245+
var renderedFilter = filter.Render(new(GridFSFileInfoSerializer.Instance, serializationDomain, translationOptions: translationOptions));
246246
return new BsonDocumentFilterDefinition<GridFSFileInfo<ObjectId>>(renderedFilter);
247247
}
248248

249-
private GridFSFindOptions<ObjectId> WrapFindOptions(GridFSFindOptions options, ExpressionTranslationOptions translationOptions)
249+
private GridFSFindOptions<ObjectId> WrapFindOptions(GridFSFindOptions options, IBsonSerializationDomain serializationDomain, ExpressionTranslationOptions translationOptions)
250250
{
251251
if (options != null)
252252
{
253-
var renderedSort = options.Sort == null ? null : options.Sort.Render(new(GridFSFileInfoSerializer.Instance, BsonSerializer.SerializerRegistry, translationOptions: translationOptions));
253+
var renderedSort = options.Sort == null ? null : options.Sort.Render(new(GridFSFileInfoSerializer.Instance, serializationDomain, translationOptions: translationOptions));
254254
var wrappedSort = renderedSort == null ? null : new BsonDocumentSortDefinition<GridFSFileInfo<ObjectId>>(renderedSort);
255255
return new GridFSFindOptions<ObjectId>
256256
{

src/MongoDB.Driver/PipelineDefinitionBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1644,7 +1644,7 @@ public AppendedStagePipelineDefinition(
16441644
public override RenderedPipelineDefinition<TOutput> Render(RenderArgs<TInput> args)
16451645
{
16461646
var renderedPipeline = _pipeline.Render(args);
1647-
var renderedStage = _stage.Render(new(renderedPipeline.OutputSerializer, args.SerializerRegistry, translationOptions: args.TranslationOptions));
1647+
var renderedStage = _stage.Render(new(renderedPipeline.OutputSerializer, args.SerializationDomain, translationOptions: args.TranslationOptions));
16481648
var documents = renderedPipeline.Documents.Concat(renderedStage.Documents);
16491649
var outputSerializer = _outputSerializer ?? renderedStage.OutputSerializer;
16501650
return new RenderedPipelineDefinition<TOutput>(documents, outputSerializer);
@@ -1720,7 +1720,7 @@ public PrependedStagePipelineDefinition(
17201720
public override RenderedPipelineDefinition<TOutput> Render(RenderArgs<TInput> args)
17211721
{
17221722
var renderedStage = _stage.Render(args);
1723-
var renderedPipeline = _pipeline.Render(new(renderedStage.OutputSerializer, args.SerializerRegistry, translationOptions: args.TranslationOptions));
1723+
var renderedPipeline = _pipeline.Render(new(renderedStage.OutputSerializer, args.SerializationDomain, translationOptions: args.TranslationOptions));
17241724
var documents = renderedStage.Documents.Concat(renderedPipeline.Documents);
17251725
var outputSerializer = _outputSerializer ?? renderedPipeline.OutputSerializer;
17261726
return new RenderedPipelineDefinition<TOutput>(documents, outputSerializer);

src/MongoDB.Driver/RenderArgs.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ public record struct RenderArgs<TDocument>
4040
private readonly ExpressionTranslationOptions _translationOptions = default;
4141
private readonly IBsonSerializationDomain _serializationDomain = default;
4242

43+
//TODO We need to stop using this constructor internally, and use the one with the serialization domain instead.
4344
/// <summary>
4445
/// Initializes a new instance of the <see cref="RenderArgs{TDocument}"/> record.
4546
/// </summary>
@@ -66,6 +67,7 @@ public RenderArgs(
6667
_renderForFind = renderForFind;
6768
_renderForElemMatch = renderForElemMatch;
6869
_translationOptions = translationOptions; // can be null
70+
_serializationDomain = BsonSerializer.DefaultSerializationDomain;
6971
}
7072

7173
/// <summary>

tests/MongoDB.Driver.Tests/MultipleRegistriesTests.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,34 @@ public void TestConventions()
168168
Assert.Equal(expectedVal, toString);
169169
}
170170

171+
[Fact]
172+
public void TestAggregate()
173+
{
174+
RequireServer.Check();
175+
176+
var customDomain = BsonSerializer.CreateSerializationDomain();
177+
customDomain.RegisterSerializer(new CustomStringSerializer());
178+
179+
var client = DriverTestConfiguration.CreateMongoClient(c => c.SerializationDomain = customDomain);
180+
var db = client.GetDatabase(DriverTestConfiguration.DatabaseNamespace.DatabaseName);
181+
db.DropCollection(DriverTestConfiguration.CollectionNamespace.CollectionName);
182+
var collection = db.GetCollection<Person>(DriverTestConfiguration.CollectionNamespace.CollectionName);
183+
var untypedCollection = db.GetCollection<BsonDocument>(DriverTestConfiguration.CollectionNamespace.CollectionName);
184+
185+
var person = new Person { Id = ObjectId.Parse("6797b56bf5495bf53aa3078f"), Name = "Mario", Age = 24 };
186+
collection.InsertOne(person);
187+
188+
var retrievedAsBson = untypedCollection.FindSync("{}").ToList().Single();
189+
var toString = retrievedAsBson.ToString();
190+
191+
var expectedVal =
192+
"""{ "_id" : { "$oid" : "6797b56bf5495bf53aa3078f" }, "Name" : "Mariotest", "Age" : 24 }""";
193+
Assert.Equal(expectedVal, toString);
194+
195+
var retrievedTyped = collection.AsQueryable().Where(x => x.Name == "Mario").ToList(); //The string serializer is correctly serializing "Mario" to "Mariotest"
196+
Assert.NotEmpty(retrievedTyped);
197+
}
198+
171199
public class Person
172200
{
173201
[BsonId] public ObjectId Id { get; set; }

0 commit comments

Comments
 (0)