no lo hagas :)
Un lugar con el que puede comenzar es aquí . Describe todos los operadores LINQ que son compatibles con el controlador MongoDB .NET. Como puedes ver .Contains()
no se menciona allí, lo que significa que no puede usarlo y obtendrá un error en el tiempo de ejecución, pero no significa que no haya forma de hacer lo que está tratando de lograr.
El operador más cercano a contains que puede usar es $indexOfBytes
que devuelve -1
si no hay coincidencia y la posición de una subcadena de lo contrario. Además, dado que necesita hacer coincidir una matriz con otra matriz, necesita dos pares de $mapa
y $anyElementTrue
para hacer exactamente lo que .Any
de .NET lo hace.
Su consulta (cliente MongoDB) puede verse así:
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" ] } ] }
}
}
}
}
}
}
})
Puede ejecutar la misma consulta desde .NET usando BsonDocument
clase que toma una cadena (JSON) y la convierte en una consulta:
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();