jangan lakukan itu :)
Satu tempat untuk memulai adalah di sini . Ini menjelaskan semua operator LINQ yang didukung oleh pengandar MongoDB .NET. Seperti yang Anda lihat .Contains()
tidak disebutkan di sana yang berarti Anda tidak dapat menggunakannya dan Anda akan mendapatkan kesalahan saat runtime tetapi itu tidak berarti bahwa tidak ada cara untuk melakukan apa yang ingin Anda capai.
Operator terdekat dengan berisi yang dapat Anda gunakan adalah $indexOfBytes
yang mengembalikan -1
jika tidak ada kecocokan dan posisi substring sebaliknya. Juga karena Anda perlu mencocokkan larik dengan larik lain, Anda memerlukan dua pasang $peta
dan $anyElementTrue
untuk melakukan persis apa yang .Any
.NET's melakukan.
Kueri Anda (klien MongoDB) dapat terlihat seperti ini:
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" ] } ] }
}
}
}
}
}
}
})
Anda dapat menjalankan kueri yang sama dari .NET menggunakan BsonDocument
kelas yang mengambil string (JSON) dan mengubahnya menjadi kueri:
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();