1

私は盲目的に明白な何かを見逃しているに違いありません。誰かが私を恥じてください。

私は2.2Aggregationクエリを構築していますが、これはC#Linq Driverでネイティブにサポートされていないため、ドット付き表記を使用してネストされたプロパティの文字列名を構築する必要があります。私がこのような構造を持っているとしましょう。

    db.so.insert({
    a:1,
    b:2,
    n : {
        z:4,
        x:5,
        y: {
           v:"value",
        }
    }
});

したがって、「値」を参照するには、名前n.y.vまたはを使用する必要がありますn[y][v]。ここで、Webクライアントからクエリのフィールドプロパティ名の選択肢を受け取っているので(http://www.demo.org/exampleQuery?field1=n&field2=y&field3=v)、このようにプロパティ名を作成する必要があります。

var fieldNameForQuery = field1+"."+field2+"."+field3;

私は明らかにこれに神経質になっているので、もちろん、入力パラメーターをサニタイズすることでNOSQLインジェクションを防御していますが、代わりにC#ドライバーを使用したいと思います。

私は次のようなものが欲しいと思います。

MongoDB.Driver.BuildNestedFieldName(field1, field2, field3));

これは基本的に私が自分で書かなければならなかったものですが、それは恨みのように感じます、そして私はむしろこの方法でDBセーフフィールド名を構築する責任を維持したくありません。

4

1 に答える 1

0

現在、あなたがやりたいことをする機能はありません。ただし、すべての関数が中央に「。」を付けるだけの場合、挿入するものを注入できなかったため、注入の問題は解決されません...注入の問題は、次のことを確認することで解決されます。 「field1」、「field2」、および「field3」はフィールド名の有効な値です。もちろん、http://bsonspec.org/#/specificationによると無効なものはそれほど多くありません。チェックするのは、文字列に2つのnullターミネータがないことだけです。だから...それは私たちにできることをたくさん残しません。

これは意味がありますか?

于 2012-10-24T18:46:31.873 に答える