c# - 如何在 MongoDB C# 聚合管道中使用 Addfields
问题描述
Mongo DB 的聚合管道有一个“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
是没有直接支持,我们不得不求助于“魔术字符串”
推荐阅读
- python - Sklearn 和 StatsModels 给出了非常不同的逻辑回归答案
- html - 忽略点击图片的透明部分
- c# - C# WCF 服务,阅读soapenv 标头安全部分
- javascript - 模拟对课堂的休息反应
- python - 我如何在python中循环打印
- c# - Blazor NavMenu 没有默认使用 @page "/" 和 querystring
- node.js - 为什么 heroku post-build 将 `/app` 附加到我的启动脚本文件?
- angular - tsconfig.app.json 的别名不起作用 Angular 11
- java - 比较两个相同的 UUID 时,为什么布尔值是假的?
- r - 图例未显示在散点图中