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/

10-09 21:22