sql >> Base de Datos >  >> NoSQL >> MongoDB

Recupere el resultado ordenado de relevancia de la consulta de texto en la colección MongoDB utilizando el controlador C#

Pude hacer que esto funcionara a través de prueba y error. El truco es que su objeto de datos debe tener un campo que contendrá el MetaTextScore valor. Así que dada la interfaz:

interface ITextSearchSortable {
    double? TextMatchScore { get; set; }
}

la función final se ve así:

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 la pena señalar que TextMatchScore no puede tener un [BsonIgnore] decoración, o habrá una excepción. Sin embargo, puede tener un [BsonIgnoreIfNull] decoración. Entonces, al borrar el valor del objeto de datos antes de entregarlo, el objeto de datos se puede volver a guardar en la colección sin poner un valor basura.