Mongo DB的Aggregation管 Prop 有“AddFields”阶段,该阶段使您可以将新字段投影到管道的输出文档中,而无需知道已经存在哪些字段。
看来这没有包含在Mongo DB的C#驱动程序中(使用2.7版)。
有人知道这是否有其他选择吗?也许是“项目”阶段的标志?
最佳答案
我不确定是否需要使用所有BsonDocument
。当然,在此示例中,我没有将文本搜索的textScore附加到搜索结果中。
private IAggregateFluent<ProductTypeSearchResult> CreateSearchQuery(string query)
{
FilterDefinition<ProductType> filter = Builders<ProductType>.Filter.Text(query);
return _collection
.Aggregate()
.Match(filter)
.AppendStage<ProductType>("{$addFields: {score: {$meta:'textScore'}}}")
.Sort(Sort)
.Project(pt => new ProductTypeSearchResult
{
Description = pt.ExternalProductTypeDescription,
Id = pt.Id,
Name = pt.Name,
ProductFamilyId = pt.ProductFamilyId,
Url = !string.IsNullOrEmpty(pt.ShopUrl) ? pt.ShopUrl : pt.TypeUrl,
Score = pt.Score
});
}
注意
ProductType
确实具有Score
属性,定义为 [BsonIgnoreIfNull]
public double Score { get; set; }
不幸的是,不直接支持
$addFields
,我们不得不求助于“魔术字符串”关于c# - 如何在MongoDB C#聚合管道中使用Addfields,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53133056/