Я не уверен, что все использование 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
не поддерживается напрямую, и нам приходится прибегать к «волшебным струнам»