しないでください:)
開始できる場所の1つは、ここ 。 MongoDB.NETドライバーでサポートされているすべてのLINQオペレーターについて説明します。ご覧のとおり、.Contains()
そこには記載されていません。つまり、使用できず、実行時にエラーが発生しますが、達成しようとしていることを実行する方法がないという意味ではありません。
使用できるcontainsに最も近い演算子は、 $indexOfBytes
です。 -1
を返します 一致するものがない場合、およびそれ以外の場合は部分文字列の位置。また、配列を別の配列と照合する必要があるため、2組の $ map
および.Any
を正確に実行する します。
クエリ(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" ] } ] }
}
}
}
}
}
}
})
BsonDocument
を使用して、.NETから同じクエリを実行できます。 文字列(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();