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

Hent relevansbestemt resultat fra tekstforespørgsel på MongoDB Collection ved hjælp af C#-driveren

Jeg var i stand til at få dette til at fungere gennem forsøg og fejl. Tricket er, at dit dataobjekt allerede skal have et felt på sig, der skal indeholde MetaTextScore værdi. Så givet grænsefladen:

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

den endelige funktion ser således ud:

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 er værd at bemærke, at TextMatchScore kan ikke have en [BsonIgnore] dekoration, ellers vil der være en undtagelse. Den kan dog have en [BsonIgnoreIfNull] dekoration. Så ved at skrubbe værdien af ​​dataobjektet, før det afgives, kan dataobjektet gemmes tilbage i samlingen uden at indsætte en skraldværdi.




  1. Brug af redis med node.js (express)

  2. Forskellen mellem id- og _id-felter i MongoDB

  3. MongoDB-forespørgsel til poster med ikke-eksisterende felt og indeksering

  4. Hvorfor skubber Spark Mongo-stikket ikke filtrene ned?