gør det ikke :)
Et sted du kan starte med er her . Den beskriver alle de LINQ-operatører, der understøttes af MongoDB .NET-driveren. Som du kan se .Contains()
er ikke nævnt der, hvilket betyder, at du ikke kan bruge det, og du vil få en fejl under kørsel, men det betyder ikke, at der ikke er nogen måde at gøre det, du forsøger at opnå.
Operatøren tættest på indeholder, du kan bruge, er $indexOfBytes
som returnerer -1
hvis der ikke er noget match og positionen af en understreng ellers. Da du også skal matche et array mod et andet array, har du brug for to par $map
og $anyElementTrue
at gøre præcis, hvad .NET's .Any
gør.
Din forespørgsel (MongoDB-klient) kan se sådan ud:
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" ] } ] }
}
}
}
}
}
}
})
Du kan køre den samme forespørgsel fra .NET ved hjælp af BsonDocument
klasse, som tager en streng (JSON) og konverterer til en forespørgsel:
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();