sql >> データベース >  >> NoSQL >> MongoDB

キー名にドットを使用してアクセスできないMongoDBJavaネストされたドキュメント

    ドット表記は、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つあることを示しています キー:_iddata-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」になります。



    1. マングースで変数を一意キーにする方法は?

    2. UbuntuにインストールされているMongoDBのバージョン

    3. psycopg2は、構文エラーで多くのステートメントの実行に失敗します

    4. mongorestoreエラー:ダンプファイルをどうするかわからない