0

mongodb を実行し、morphia を使用しています。
ドキュメントのコレクションがBatchDataあり、いくつかのフィールド値を除外する必要があります。

これはエンティティです:

@Entity
public class BatchData {

  @Id private ObjectId id;
  public int val1;
  public int val2;
  public String uuid;

}

val1等しい場合val2、クエリは返されますuuid

これは取得できる限りですが、もちろん機能しません。

Query<BatchData> q = mongo.createQuery(BatchData.class).field("val1").equal("val2");
List<BatchData> entities = q.asList();

また

Query<BatchData> q = mongo.createQuery(BatchData.class).field("val1").equal(BatchData.class.val2)

100 万以上のBatchDataドキュメントが存在する可能性があるため、パフォーマンス上の理由で のみ
返す必要があります。uuid

wiki を読んでいて、2 つのメンバー フィールドのフィルターを理解できない、または表示できない
Morphia wiki

4

2 に答える 2

1

Morphia でこれを行う適切な方法はないと思いますが、基本的な Java MongoDB ライブラリを使用して、Javascript をサポートする $where 演算子を使用できます。

BasicDBObject query = new BasicDBObject( "$where",  
   "function() { return this.val1 == this.val2 }" );
DBCollection fieldsCollection = db.getCollection("BatchData");
DBCursor cursor = fieldsCollection .find(query);

各オブジェクトをアンパックしてスキャンする必要があり、インデックスを使用できないため、それほど高速ではありませんが、必要なことは実行できます。

于 2012-03-29T12:40:24.123 に答える