nie rób tego :)
Jednym z miejsc, od którego możesz zacząć, jest tutaj . Opisuje wszystkie operatory LINQ, które są obsługiwane przez sterownik MongoDB .NET. Jak widać .Contains()
nie jest tam wymienione, co oznacza, że nie możesz go użyć i otrzymasz błąd w czasie wykonywania, ale nie oznacza to, że nie ma możliwości zrobienia tego, co chcesz osiągnąć.
Operator najbliższy zawartości, której możesz użyć, to $indexOfBytes
co zwraca -1
jeśli nie ma dopasowania, a pozycja podciągu inaczej. Ponieważ musisz dopasować tablicę do innej tablicy, potrzebujesz dwóch par $mapa
i $anyElementTrue
zrobić dokładnie to, co .Any
.NET czy.
Twoje zapytanie (klient MongoDB) może wyglądać tak:
db.collection.find({
$expr: {
$anyElementTrue: {
$map: {
input: "$groupsAuthorized",
as: "group",
in: {
$anyElementTrue: {
$map: {
input: ["France/IDF/Paris", "USA/NY/NYC"],
as: "userGroup",
in: { $ne: [ -1, { $indexOfBytes: [ "$$userGroup", "$$group" ] } ] }
}
}
}
}
}
}
})
Możesz uruchomić to samo zapytanie z .NET za pomocą BsonDocument
klasa, która pobiera ciąg (JSON) i konwertuje na zapytanie:
var query = BsonDocument.Parse(@"{
$expr: {
$anyElementTrue:
{
$map:
{
input: '$groupsAuthorized',
as: 'group',
in: {
$anyElementTrue:
{
$map:
{
input: ['France/IDF/Paris', 'USA/NY/NYC'],
as: 'userGroup',
in: { $ne: [-1, { $indexOfBytes: ['$$userGroup', '$$group'] } ] }
}
}
}
}
}
}
}");
var result = col.Find(query).ToList();