非常に簡単なアルゴリズムを実装しようとしています。 単純な階層があるとしましょう: (ルート)A => B => C すべてのnoveはIDを表し、すべてのIDは多くのレコードを含んでいます。MongoDB C#ドライバ - >文字列にリストの要素(文字列)が含まれていないか確認してください。
録音は持っている: (文字列)同上と(リスト)だから我々は持つことができます
をExcludedId:
REC1:{ID:Aを、 ExcludedId = [B]}
rec2:{Id:A; ExcludedId = [D]}
rec3:{Id:A; ExcludedId = [B]}
rec1 ':{Id:A; ExcludedId = []}
REC1" :{ID:C; ExcludedId = []}
REC2' :{ID:D; ExcludedId = []}
次にアルゴリズムは次のようになります。
私はCIからレコードを取りたい場合は、取る必要があります。 C、B、Aは、IDに存在し、 C、B、A、NOTはExcludedId
に存在するだから私は書いた:
Unsupported filter: Any(value(System.Collections.Generic.List`1[System.String]).Where({document}{Id}.Contains({document}))).'
は、あなたがそれで私を助けることができる: は、しかし、私は言う例外を受け取りますか?事前にありがとう
編集:
を変更:
Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.Id.Contains(s))
Builders<Record>.Filter.In(ts => ts.ScenarioGuid, parentScenarioGuids),
へそしてそれは動作します!しかし、問題があります。
Builders<Record>.Filter.Not(Builders<Record>.Filter.Where(record => allScenarios.Any(s => record.ExcludedIds.Contains(s))))
);
ExcludedIdsはListであるため、問題があります。結果:
Builders<Record>.Filter.Nin(ts => ts.ExcludedScenarioGuids, allScenarios)
は
Cannot convert lambda expression to type FieldDefinition<Records, string> because it not a delegate type.
例外は、TS => ts.ExcludedScenarioGuids
EDIT2に指摘されて言う:@cloudikkaが書いたように、解決策はAnyNinあるような
とに。ありがとう
ありがとう!私の問題を部分的に解決しました。しかし、私は私の質問に書いたようなNinにはまだ問題があります(私は編集しました)。もう一度助けてもらえますか? –
私はそれがArrayフィールドであり、その場合は[AnyNinメソッド](http://mongodb.github.io/mongo-csharp-driver/2.5/apidocs/html/M_MongoDB_Driver_FilterDefinitionBuilder_1_AnyNin__1.htm)を使用する必要があります。 – cloudikka
ありがとうございます!数分前にanyNinを見つけました。しかし基本的にはあなたの答えが私を助けました。 –