4

ケース

Javaを使用してMongoデータベースへのクエリを実行しようとしています。シェルでは、私が話しているクエリは次のようになります。

db.myCollection.find({ "array" : { "$in" : [ "foo" , "bar" ]}});

クエリは次のように Java でまとめられます。

DBCursor cursor = myCollection.find(new BasicDBObject("array", new BasicDBObject("$in", items)));

ここで、変数itemsは String[] として定義され、別の場所から渡されます。任意の値を保持できますが、この例では次の要素が含まれています。

"foo", "bar";

問題

ここから問題が始まります。通話中

cursor.getQuery()

戻り値

{ "array" : { "$in" : [ "\"foo\"" , "\"bar\"" ]}}

結果は返されません。ご覧のとおり、Java 用の Mongo ドライバーは引用符を追加してエスケープしました。

私は試した

  1. 配列をコピーし、すべてがトリミングされていることを確認します。次に、それをクエリに渡します。

    String[] test = new String[items.length];
    for(int i = 0; i < items.length; i++){
        test[i] = items[i].trim();
    }
    

    うまくいきませんでした。

  2. さあ、ここにあなたのための本当の魔法があります!次のように、クエリの直前に文字列を初期化してみました。

    String[] items = new String[]{ "foo", "bar" };
    

    そのように初期化すると、Mongo は引用符をエスケープせず、クエリは機能します。


では、これがどのようなトリックなのか知りたいです。そして、どうすればこれを解決できますか。

読んでくれてありがとう!

4

2 に答える 2

0

受け入れられた答えは正しいです、

同様のケースで、次のトリックを適用しました。引用された式の解決策が必要な場合は、解決策を下回っています。

BasicDBObject objectJsonKey = BasicDBObject.parse(quotedStrKey);
BasicDBObject filterCondition = new BasicDBObject("_id", objectJsonKey);

quotedStrKey_id二重引用符で囲まれた私の複合jsonオブジェクトです"

于 2021-10-19T17:11:01.117 に答える