doe het niet :)
Een plaats waarmee u kunt beginnen is hier . Het beschrijft alle LINQ-operators die worden ondersteund door het MongoDB .NET-stuurprogramma. Zoals je kunt zien .Contains()
wordt daar niet vermeld, wat betekent dat je het niet kunt gebruiken en dat je een arror krijgt in de runtime, maar het betekent niet dat er geen manier is om te doen wat je probeert te bereiken.
De operator die het dichtst bij bevat die u kunt gebruiken, is $indexOfBytes
wat -1
returns retourneert als er geen overeenkomst is en anders de positie van een subtekenreeks. Omdat je een array moet vergelijken met een andere array, heb je twee paar $map
en $anyElementTrue
om precies te doen wat .NET's .Any
. is doet.
Uw zoekopdracht (MongoDB-client) kan er als volgt uitzien:
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" ] } ] }
}
}
}
}
}
}
})
U kunt dezelfde query uitvoeren vanuit .NET met behulp van BsonDocument
class die een string (JSON) neemt en omzet in een 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();