не го прави :)
Едно място, от което можете да започнете, е тук . Той описва всички LINQ оператори, които се поддържат от MongoDB .NET драйвера. Както можете да видите .Contains()
не се споменава там, което означава, че не можете да го използвате и ще получите грешка по време на изпълнение, но това не означава, че няма начин да направите това, което се опитвате да постигнете.
Операторът, който е най-близо до съдържа, който можете да използвате, е $indexOfBytes
което връща -1
ако няма съвпадение и позицията на подниз в противен случай. Освен това, тъй като трябва да съпоставите масив с друг масив, имате нужда от два чифта $map
и $anyElementTrue
да правите точно това, което .Any
на .NET прави.
Вашата заявка (MongoDB клиент) може да изглежда така:
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" ] } ] }
}
}
}
}
}
}
})
Можете да стартирате същата заявка от .NET, като използвате BsonDocument
клас, който приема низ (JSON) и преобразува в заявка:
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();