MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Récupérer le résultat ordonné par pertinence à partir d'une requête de texte sur la collection MongoDB à l'aide du pilote C #

J'ai réussi à faire fonctionner cela par essais et erreurs. L'astuce est que votre objet de données doit déjà avoir un champ qui contiendra le MetaTextScore évaluer. Donc étant donné l'interface :

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

la fonction finale ressemble à ceci :

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;
    }
}

Il convient de noter que TextMatchScore ne peut pas avoir de [BsonIgnore] décoration, ou il y aura une exception. Cependant, il peut avoir un [BsonIgnoreIfNull] décoration. Ainsi, en supprimant la valeur de l'objet de données avant de la céder, l'objet de données peut être réenregistré dans la collection sans mettre de valeur inutile.