在morphia中如何查询和返回基于另外两个整数字段的字段是否相同

时间:2012-03-28 00:55:00

标签: java mongodb morphia

我有mongodb跑步和使用吗啡 拥有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();

OR

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

可能有一百万或更多BatchData份文件,所以我必须只有 因性能原因返回uuid

一直在阅读维基,无法理解或看到两个成员字段的过滤器 Morphia wiki

2 个答案:

答案 0 :(得分: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);

它不是超快,因为它需要解压缩并扫描每个对象而不能使用索引,但它会做你想要的。

答案 1 :(得分:1)

如果性能非常重要,您应该查看map-reduce函数。不幸的是,morphia不支持这种MongoDB功能,因此您需要使用java mongo驱动程序本身。请参阅exampledocs