ドット表記は、find
内で使用すると正常に機能します メソッドのクエリフィルター。たとえば、
Document document = collection.find(Filters.eq("one.two", "three")).first();
System.out.println(document); // prints the returned document
またはそのmongo
同等のシェル:
db.collection.find( { "one.two": "three" } )
ドキュメント
クラスのget()
メソッドはObject
を取ります (文字列キー)をパラメータとして使用し、Object
を返します 。
コードを考えてみましょう:
Document doc = coll.find(eq("data-id", "1234")).first();
System.out.println(doc);
出力Document{{_id=1.0, data-id=1234, one=Document{{two=three}}}}
3つあることを示しています キー:_id
、data-id
およびone
。 ないことに注意してください one.two
という名前のキー 。キーtwo
サブドキュメント内 キーone
を持つドキュメントの 。
だから、あなたのコードから:
document.get("one.two"); // This is null ((Document)
document.get("one")).get("two"); // Not null
最初のステートメントはnull
を返します 、次のものはthree
を返します (文字列値)。どちらも正しい 結果とそれがDocument
の動作です クラスAPI。
getEmbedded
メソッドを使用する必要があります 埋め込みフィールドone.two
にアクセスするには 。したがって、document.get("one.two")
を置き換えます と
document.getEmbedded(Arrays.asList("one", "two"), String.class)
結果は、予想どおり「3」になります。