1

ネストされたオブジェクトを持つコレクションをクエリしています。ドメイン モデルは次のようになります。

@Document(collection="a")
public class A {

   protected Map<String, B> fields;
   protected String uuid;
   protected Date updatedTs;

   //Getters and setters and other fields omitted
}

public class B{

   protected String c;
   protected String d;

}

次のような基準を使用してクエリを実行しています。

{ "uuid" : "9DA291A4-1BAB-4B9C-844D-681C3F1ABF6E"}

私が使用して作成する

Criteria.where("uuid").is(uuid);

次のように出力できるため、基準オブジェクトには他のものが含まれていないことがわかります。

log.debug("Criteria: " + SerializationUtils.serializeToJsonSafely(c.getCriteriaObject()));

パッケージ org.springframework.data.mongodb.core のデバッグ ロギングを有効にすると、実際にサーバーに送信されるクエリは次のようになります。

{ "uuid" : "9DA291A4-1BAB-4B9C-844D-681C3F1ABF6E"} fields: null

編集:私のドキュメントには「フィールド」と呼ばれるフィールドが含まれており、コードまたはmongoTemplate/spring-dataで実際にフィールドを検索しているようです:null。fields: null は実際には返されるフィールド名のセットを参照しているため、MongoTemplate のログ行は私を混乱させました。

では、プロパティ「フィールド」が null のドキュメントのみを返す spring-data なしで、その uuid に一致するドキュメントを検索するにはどうすればよいでしょうか?

その間、ドキュメント構造を変更できないため、これを回避する方法をまだ調査しています...

4

1 に答える 1

1

ログ出力に表示されるfields内容は、ドメインオブジェクトとは何の関係もありません。これは、JSON文字列の外側に配置されていることで示されます。この場合、本質的に投影メカニズムfieldsである、見つかった各ドキュメントに対して返されるフィールドを参照しています。

于 2013-01-15T08:44:11.153 に答える