non farlo :)
Un punto da cui puoi iniziare è qui . Descrive tutti gli operatori LINQ supportati dal driver MongoDB .NET. Come puoi vedere .Contains()
non è menzionato lì, il che significa che non puoi usarlo e riceverai un errore nel runtime, ma non significa che non c'è modo di fare ciò che stai cercando di ottenere.
L'operatore più vicino a contiene che puoi utilizzare è $indexOfBytes
che restituisce -1
se non c'è corrispondenza e la posizione di una sottostringa in caso contrario. Inoltre, poiché è necessario confrontare un array con un altro array, sono necessarie due coppie di $mappa
e $anyElementTrue
per fare esattamente ciò che è .Any
di .NET fa.
La tua query (client MongoDB) può assomigliare a questa:
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" ] } ] }
}
}
}
}
}
}
})
Puoi eseguire la stessa query da .NET usando BsonDocument
classe che accetta una stringa (JSON) e la converte in una query:
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();