sql >> Databasteknik >  >> NoSQL >> MongoDB

Hämta relevansbeställt resultat från textfråga på MongoDB Collection med C#-drivrutinen

Jag kunde få det här att fungera genom försök och misstag. Tricket är att ditt dataobjekt redan måste ha ett fält på sig som innehåller MetaTextScore värde. Så givet gränssnittet:

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

den slutliga funktionen ser ut så här:

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

Det är värt att notera att TextMatchScore kan inte ha en [BsonIgnore] dekoration, annars kommer det att finnas ett undantag. Den kan dock ha en [BsonIgnoreIfNull] dekoration. Så genom att skrubba bort värdet från dataobjektet innan det ger det, kan dataobjektet sparas tillbaka i samlingen utan att lägga in ett skräpvärde.




  1. Resulterar varje anrop inom ett multi()-anrop i phpredis i en ny nätverksresa till redis?

  2. Redisson, arbetskö/dequeu. Strategier för bearbetning av meddelande / element vid ofullständig meddelandehantering vid avstängning av system / pod

  3. Hur kör man ett dynamiskt antal kriterier i mongoose.find?

  4. Hitta nästa dokument i MongoDb