2016-09-27 3 views
2

Ich versuche, eine Suchfunktion für eine REST-API mit mongodb und C# zu erstellen.

Ich versuche, den $ in mongodb Filter in einer Abfrage zu verwenden. Ich weiß, dass die Codierung der Filterzeichenfolge {\"name\":{$in:[/^First/]}} den Datensatz finden, wie ich es wünsche, aber ich kann nicht die gleiche Funktionalität erhalten, wenn Sie Filter.In verwenden.

In meinem Mongo Repo habe ich ein GetAsync, die in der name nimmt und führt Folgendes aus:

return await Context 
       .Collection<TChronosDocument>() 
       .Find(
        //"{\"name\":{$in:[/^First/]}}") 
        Builders<TChronosDocument>.Filter.In(x => name, ToRegex(name))) 
       .Sort(SortDefinition) 
       .Page(offset, limit) 
       .ToListAsync() 
       .ToAggregate(Mapper); 

Die ToRegex Funktion lediglich wandelt eine Zeichenkette wie First in einen String [] wie [/^First/] zur Verwendung durch den Filter .

Das Problem hier ist, dass dies ein leeres Array für die Ergebnisse zurückgibt, anstatt korrekt mit dem Eintrag mit name : "First Agency" übereinstimmen.

Ich bin nicht sicher, ob dies der richtige Weg ist, um die $ in-Funktionalität in C# zu erreichen, oder wenn ich hier nur etwas falsch mache.

(PS: Ich habe versucht mit Find(Builders<TChronosDocument>.Filter.In(name, ToRegex(name))) ohne Glück auch nicht).

Antwort

0

Try

Builders<TChronosDocument>.Filter.In(x => name, ToRegex(name))) 

mit

Builders<TChronosDocument>.Filter.ElemMatch(x => name, ToRegex(name)) 
ersetzt