首页 > 解决方案 > 如何在 MongoDB C# 聚合管道中使用 Addfields

问题描述

Mongo DB 的聚合管道有一个“AddFields”阶段,它允许您将新字段投影到管道的输出文档中,而无需知道哪些字段已经存在。

似乎这还没有包含在 Mongo DB 的 C# 驱动程序中(使用版本 2.7)。

有谁知道是否有任何替代方案?也许是“项目”阶段的一面旗帜?

标签: c#mongodbaggregation

解决方案


我不确定所有的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是没有直接支持,我们不得不求助于“魔术字符串”


推荐阅读