Успях да накарам това да работи чрез проба и грешка. Номерът е, че вашият обект с данни трябва вече да има поле, което да съдържа MetaTextScore
стойност. И така, предвид интерфейса:
interface ITextSearchSortable {
double? TextMatchScore { get; set; }
}
крайната функция изглежда така:
public IEnumerable<T> TextSearch<T>(MongoCollection<T> coll, string text) where T:ITextSearchSortable {
var cursor = coll.Find(Query.Text(text))
.SetFields(Fields<T>.MetaTextScore(t => t.TextMatchScore))
.SetSortOrder(SortBy<T>MetaTextScore(t => t.TextMatchScore));
foreach(var t in cursor) {
// prevent saving the value back into the database
t.TextMatchScore = null;
yield return t;
}
}
Струва си да се отбележи, че TextMatchScore
не може да има [BsonIgnore]
украса, или ще има изключение. Въпреки това може да има [BsonIgnoreIfNull]
украса. Така че чрез изтриване на стойността от обекта с данни, преди да го предостави, обектът с данни може да бъде записан обратно в колекцията, без да се поставя стойност за боклук.