não faça isso :)
Um lugar onde você pode começar é aqui . Ele descreve todos os operadores LINQ que são suportados pelo driver MongoDB .NET. Como você pode ver
.Contains()
não é mencionado lá, o que significa que você não pode usá-lo e obterá uma erro no tempo de execução, mas isso não significa que não há como fazer o que você está tentando alcançar. O operador mais próximo do conteúdo que você pode usar é $indexOfBytes que retorna
-1
se não houver correspondência e a posição de uma substring, caso contrário. Além disso, como você precisa combinar um array com outro array, você precisa de dois pares de $map
e $anyElementTrue
para fazer exatamente o que o .Any
do .NET faz. Sua consulta (cliente MongoDB) pode ficar assim:
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" ] } ] }
}
}
}
}
}
}
})
Mongo Playground ,
Você pode executar a mesma consulta do .NET usando
BsonDocument
class que recebe uma string (JSON) e converte em uma 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();