в Morphia, как запросить и вернуть поле на основе двух других целочисленных полей одинаковы или нет - PullRequest
0 голосов
/ 28 марта 2012

У меня работает 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)

Может быть один миллион или более BatchData документов, поэтому я должен только
вернуть uuid для производительностипричина.

Читал вики и не может понять или увидеть фильтр для двух полей
Morphia wiki

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Если производительность очень важна, вы должны взглянуть на функцию уменьшения карты.К сожалению, morphia не поддерживает эту функцию MongoDB, поэтому вам нужно работать с самим драйвером java mongo.См. пример и документы .

1 голос
/ 29 марта 2012

Я не думаю, что в Morphia есть какой-либо изящный способ сделать это, но вы можете использовать базовую библиотеку Java MongoDB и использовать оператор $ where с поддержкой Javascript.

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

Это не супер быстро, так как нужно распаковывать и сканировать каждый объект и не может использовать индексы, но оно будет делать то, что вы хотите.

...