Details
-
Bug
-
Resolution: Works as Designed
-
Major - P3
-
None
-
None
-
None
Description
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.