Udało mi się to uruchomić metodą prób i błędów. Sztuczka polega na tym, że twój obiekt danych musi mieć już pole, które będzie zawierało MetaTextScore
wartość. Więc biorąc pod uwagę interfejs:
interface ITextSearchSortable {
double? TextMatchScore { get; set; }
}
końcowa funkcja wygląda tak:
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;
}
}
Warto zauważyć, że TextMatchScore
nie może mieć [BsonIgnore]
dekoracja lub będzie wyjątek. Jednak może mieć [BsonIgnoreIfNull]
dekoracja. Tak więc usuwając wartość z obiektu danych przed jego przekazaniem, obiekt danych można zapisać z powrotem w kolekcji bez wprowadzania wartości śmieci.