ne le fais pas :)
Un endroit par lequel vous pouvez commencer est ici . Il décrit tous les opérateurs LINQ pris en charge par le pilote MongoDB .NET. Comme vous pouvez le voir .Contains()
n'est pas mentionné ici, ce qui signifie que vous ne pouvez pas l'utiliser et que vous obtiendrez une erreur lors de l'exécution, mais cela ne signifie pas qu'il n'y a aucun moyen de faire ce que vous essayez d'accomplir.
L'opérateur le plus proche de contient que vous pouvez utiliser est $indexOfBytes
qui renvoie -1
s'il n'y a pas de correspondance et la position d'une sous-chaîne sinon. De plus, puisque vous devez faire correspondre un tableau à un autre tableau, vous avez besoin de deux paires de $carte
et $anyElementTrue
pour faire exactement ce que le .Any
de .NET Est-ce que.
Votre requête (client MongoDB) peut ressembler à ceci :
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" ] } ] }
}
}
}
}
}
}
})
Vous pouvez exécuter la même requête à partir de .NET en utilisant BsonDocument
classe qui prend une chaîne (JSON) et la convertit en une requête :
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();