MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Recupera il risultato ordinato di pertinenza dalla query di testo sulla raccolta MongoDB utilizzando il driver C#

Sono stato in grado di farlo funzionare attraverso tentativi ed errori. Il trucco è che il tuo oggetto dati deve avere già un campo che conterrà il MetaTextScore valore. Quindi data l'interfaccia:

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

la funzione finale si presenta così:

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 notare che TextMatchScore non può avere un [BsonIgnore] decorazione, o ci sarà un'eccezione. Tuttavia, può avere un [BsonIgnoreIfNull] decorazione. Quindi, eliminando il valore dall'oggetto dati prima di restituirlo, l'oggetto dati può essere salvato nuovamente nella raccolta senza inserire un valore spazzatura.