nedělej to :)
Jedním z míst, kde můžete začít, je zde . Popisuje všechny operátory LINQ, které podporuje ovladač MongoDB .NET. Jak můžete vidět .Contains()
není tam uvedeno, což znamená, že to nemůžete použít a za běhu se objeví chyba, ale to neznamená, že neexistuje způsob, jak udělat to, čeho se snažíte dosáhnout.
Nejbližší operátor obsahuje, který můžete použít, je $indexOfBytes
což vrátí -1
pokud neexistuje žádná shoda a pozice podřetězce jinak. Také protože potřebujete porovnat pole s jiným polem, potřebujete dva páry $map
a $anyElementTrue
dělat přesně to, co .NET je .Any
dělá.
Váš dotaz (klient MongoDB) může vypadat takto:
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" ] } ] }
}
}
}
}
}
}
})
Stejný dotaz můžete spustit z .NET pomocí BsonDocument
třída, která vezme řetězec (JSON) a převede na dotaz:
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();