-
Type:
Bug
-
Resolution: Works as Designed
-
Priority:
Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Serialization
-
None
-
None
-
None
-
None
-
None
-
None
-
None
-
None
I am logging commands using
// The following will map .NET Pascal Cased properties to bson Camel Cased properties.
var conventionPack = new ConventionPack
{
new CamelCaseElementNameConvention(), new IgnoreExtraElementsConvention(true)
};
ConventionRegistry.Register("camelCase", conventionPack, t => true);
clientSettings.ClusterConfigurator = cb =>
{
// This makes the output strictly JSON, such that we can format the logged commands.
// The output can still be used in a shell (ex NoSqlBooster)
// Without this, the output can contain JS code, such a regular expression literals
// which would fail to format in a JSON formatter.
var jsonWriterSettings = new JsonWriterSettings { OutputMode = JsonOutputMode.Strict };
cb.Subscribe<CommandStartedEvent>(e =>
{
if (_logger.IsEnabled(LogLevel.Debug))
{
_logger.LogDebug($"MongoDb - {e.CommandName} - {e.Command.ToJson(jsonWriterSettings)}");
}
});
};
This method
// ... .Project(augmentedProductType => new ProductTypeSearchResult { Description = augmentedProductType.ExternalProductTypeDescription })
Results in a logged statement like (theLoggedCommand)
private const string ProjectionStage = @" { "$project":{ "Description":"$externalProductTypeDesc" } }
But if I then replace the Project method call with the logged command using
private static readonly PipelineStageDefinition<SearchAugmentedProductType, ProductTypeSearchResult> ProjectionPipelineStageDefinition = "theLoggedCommand"; .AppendStage(ProjectionPipelineStageDefinition);
Default serialization mapping does not work. I actually have to change the command to have lower case properties.
private const string ProjectionStage = @" { "$project":{ "description":"$externalProductTypeDesc" } }
I would not expect to have to do that. I would expect that if I am using the logged command, the serialization mapping should continue to work. It took quite a while trying to figure out why I was having to add BsonElement annotations after switching to using AppendStage with the command that was logged.