Tu es nicht :)
Ein Ort, an dem Sie anfangen können, ist hier . Es beschreibt alle LINQ-Operatoren, die vom MongoDB .NET-Treiber unterstützt werden. Wie Sie sehen können .Contains()
wird dort nicht erwähnt, was bedeutet, dass Sie es nicht verwenden können und Sie einen Fehler in der Laufzeit erhalten, aber es bedeutet nicht, dass es keine Möglichkeit gibt, das zu erreichen, was Sie erreichen möchten.
Der nächste Operator, den Sie verwenden können, ist $indexOfBytes
was -1
zurückgibt wenn es keine Übereinstimmung gibt und andernfalls die Position einer Teilzeichenfolge. Da Sie außerdem ein Array mit einem anderen Array abgleichen müssen, benötigen Sie zwei Paare von $karte
und $anyElementTrue
um genau das zu tun, was .Any
von .NET macht tut.
Ihre Abfrage (MongoDB-Client) kann so aussehen:
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" ] } ] }
}
}
}
}
}
}
})
Sie können dieselbe Abfrage in .NET mit BsonDocument
ausführen Klasse, die einen String (JSON) nimmt und in eine Abfrage umwandelt:
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();