Saya bisa mendapatkan ini bekerja melalui trial and error. Triknya adalah objek data Anda harus sudah memiliki bidang yang akan menampung MetaTextScore
nilai. Jadi mengingat antarmuka:
interface ITextSearchSortable {
double? TextMatchScore { get; set; }
}
fungsi akhir terlihat seperti ini:
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;
}
}
Perlu diperhatikan bahwa TextMatchScore
tidak dapat memiliki [BsonIgnore]
dekorasi, atau akan ada pengecualian. Namun, ia dapat memiliki [BsonIgnoreIfNull]
dekorasi. Jadi dengan menghapus nilai dari objek data sebelum menghasilkannya, objek data dapat disimpan kembali ke dalam koleksi tanpa memasukkan nilai sampah.