MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDB c# sterownik:bez rozróżniania wielkości liter Porównaj używając in lub zawiera na liście używając linq

W końcu znalazłem rozwiązanie tego problemu, po wielu poszukiwaniach odkryłem, że toLower() metody nie są zaimplementowane w dostawcy mongoDb linq, więc musiałem przejść na używanie MongoQuery

Stworzyłem kilka metod rozszerzających dla stringów i list, które pobierają string lub listę jako źródło i konwertują je na wyrażenie regularne bson

internal static List<BsonValue> ConvertToCaseInsensitiveRegexList(this IEnumerable<string> source)
{
    return source.Select(range => new BsonRegularExpression("/^" + range.Replace("+", @"\+") + "$/i")).Cast<BsonValue>().ToList();
}

internal static List<BsonValue> ConvertToEndsWithRegexList(this IEnumerable<string> source)
{
    return source.Select(range => new BsonRegularExpression("/" + range.Replace("+", @"\+") + "$/i")).Cast<BsonValue>().ToList();
}

internal static BsonRegularExpression ToCaseInsensitiveRegex(this string source)
{
    return new BsonRegularExpression("/^" + source.Replace("+", @"\+") + "$/i");
}

a potem są używane w ten sposób...

var colours = new List<string> { "Red", "blue", "white" };
var query = Query<myObject>.In(v => v.Colour, colours.ConvertToCaseInsensitiveRegexList());
this.Find(query).ToList();


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Funkcja Mongo Find() nie wyklucza _id

  2. Fragmenty MongoDB i serwery konfiguracyjne na tym samym serwerze?

  3. Plasterek wiosennego repozytorium mongo

  4. Lepszy sposób na przeniesienie kolekcji MongoDB do innej kolekcji

  5. Jak zainstalować najnowszą wersję mongodb-clients na Ubuntu?