MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Recuperar o resultado ordenado de relevância da consulta de texto na coleção do MongoDB usando o driver C#


Consegui fazer isso funcionar por tentativa e erro. O truque é que seu objeto de dados precisa ter um campo já que conterá o MetaTextScore valor. Então, dada a interface:
interface ITextSearchSortable {
    double? TextMatchScore { get; set; }
}

a função final fica assim:
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;
    }
}

Vale a pena notar que TextMatchScore não pode ter um [BsonIgnore] decoração, ou haverá uma exceção. No entanto, pode ter um [BsonIgnoreIfNull] decoração. Portanto, removendo o valor do objeto de dados antes de cedê-lo, o objeto de dados pode ser salvo de volta na coleção sem colocar um valor de lixo.