Jos*_*osh 5 .net c# mongodb asp.net-core
当使用 PipelineStageDefinitionBuilder 为聚合管道创建投影阶段时,它似乎总是忽略Id
数据集中的任何值。我在 .Net Core 应用程序中使用 Mongo .Net 驱动程序 2.8。以下是复制步骤。
在 Aggregate() 上使用 IAggregateFluent 语法时,相同的投影有效,但我需要使用构面构建器。当针对聚合运行构建器时,它也可以工作,但是在 a 中facet
它无法绑定任何Id
值。
只是带有 id 的空类用于测试(添加类型以显示法线映射工作):
public class DatabaseModel
{
public Guid Id { get; set; }
public string Type { get; set; }
}
public class ProjectionClass
{
public Guid Id { get; set; }
public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
当我使用下面的内容创建投影时,它成功生成查询,但是在所有返回的模型中,Id 值设置为 null。该查询似乎有一个 Id_ : 0 值,但在正常聚合中似乎也产生了相同的值,所以我认为这不相关?
var typeFilter = Builders<DatabaseModel>.Filter.Eq(x => x.Type, "Full");
var aggregationPipeline = new EmptyPipelineDefinition<DatabaseModel>()
.AppendStage(PipelineStageDefinitionBuilder.Match(typeFilter))
.AppendStage(PipelineStageDefinitionBuilder.Project<DatabaseModel, ProjectionClass>(x => new ProjectionClass
{
Id = x.Id,
Type = x.Type,
}));
var normalAggregationResult = await db.Aggregate(aggregationPipeline).ToListAsync();//The id's appear here
var databaseModelsFacet = AggregateFacet.Create("DatabaseModels", aggregationPipeline);
var faucetResult = db.Aggregate().Facet(databaseModelsFacet).SingleOrDefault().Facets;
var projectionModels = faucetResult.
Single(x => x.Name == "DatabaseModels")
.Output<ProjectionClass>();// This results in missing Id's (Including in nested objects with anything named Id)
Run Code Online (Sandbox Code Playgroud)
结果 mongo 查询
{[{
"$match" : { "Type" : "Full" } },
{ "$project" : { "Id" : "$_id", "Type" : "$Type", "_id" : 0 }
}]}
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以使用带有侧面的管道构建器来运行投影,同时不忽略 Id?我见过使用类似查询的示例,但没有认为这是一个问题。这可能是构面的问题,因为它似乎只在使用它时才会发生。
谢谢!
2020 年 6 月 1 日更新:发现问题似乎只发生在 Facet 后更新了问题
这似乎是一个驱动程序问题(或者其他问题是当结构与字段不匹配时),因为 Id 不能简单地序列化为 Id ,但是如果您选择任何其他值,它就会起作用
[BsonNoId]
public class DatabaseModel
{
[BsonRepresentation(BsonType.ObjectId)]
public string Identifier { get; set; }
public string Type { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3149 次 |
最近记录: |