ケース
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 ドライバーは引用符を追加してエスケープしました。
私は試した
配列をコピーし、すべてがトリミングされていることを確認します。次に、それをクエリに渡します。
String[] test = new String[items.length]; for(int i = 0; i < items.length; i++){ test[i] = items[i].trim(); }
うまくいきませんでした。
さあ、ここにあなたのための本当の魔法があります!次のように、クエリの直前に文字列を初期化してみました。
String[] items = new String[]{ "foo", "bar" };
そのように初期化すると、Mongo は引用符をエスケープせず、クエリは機能します。
では、これがどのようなトリックなのか知りたいです。そして、どうすればこれを解決できますか。
読んでくれてありがとう!