-1
mongo + javaに$ regexを指定して$をクエリに書き込もうとしています。モンゴシェルから正常に動作していると私は結果を取得しています:
db.getCollection('collection').find({ "_id" : { "$in" : [ /^1332444344/]}})
しかし、私は私のJavaアプリケーションから実行しようとすると、私は結果を得るません:
DBCollection collection = db.getCollection("collection");
BasicDBObject query = new BasicDBObject();
inQuery.put("_id", new BasicDBObject("$in", input));
DBCursor cursor = collection.find(query);
// This returns no results
// Query: { "_id" : { "$in" : [ { "$regex" : "/^1332444344/"} ] }}
input = Lists.newArrayList(Pattern.compile("/^1332444344/"));
// The following as well returned nothing
// Query: { "_id" : { "$in" : [ "/^1332444344/" ] }}
input = Lists.newArrayList("/^1332444344/"));
Javaコードが追加されます正規表現の周りの二重引用符とこれは問題を引き起こしているようです。
私はまた、次のことを試みたが、JSONの解析例外を得た:
BasicQuery bq = new BasicQuery("{ \"_id\" : { \"$in\" : [ /^1332444344/ ]}}")
は、この問題の任意の回避策はありますか?
おかげ
本当に問題を引き起こしているのは/ 'sだと思います。文字列( '^')の開始前に '/'を付けることはできません。 (Javaは、正規表現の開始と終了を示すために '/'を使用しません)。 –
"Javaコードが正規表現の前後に二重引用符を追加しています":Q:正確にはどういう意味ですか? Q:文字列リテラルの[エスケープ文字](http://docs.oracle.com/javase/tutorial/java/data/characters.html)( '\\')に精通していますか? – paulsm4
ありがとう@AndyTurner。あなたが正しいです。 Lists.newArrayList(Pattern.compile( "^ 1332444344"))正常に機能しました! –