在String列表中使用morphia by element查询MongoDB

时间:2015-07-01 18:34:43

标签: java mongodb morphia

这是文件格式:

{
 "_id" : ObjectId("123")
 "types" : [ "PHONE", "ADDRESS" ]
},
{
 "_id" : ObjectId("345")
 "types" : [ "PHONE" ]
},
{
 "_id" : ObjectId("567")
 "types" : [ "PHONE", "NAME" ]
}

这是查找包含某些类型的元素的查询:

public List<MyCollection> findByType(Type type) {
  return getDatastore().createQuery(MyCollection.class)
     .field("types").hasThisElement(type.toString())
     .asList();
}

使用此代码,我收到此错误:

com.mongodb.MongoException: Can't canonicalize query: BadValue $elemMatch needs an Object

我尝试使用hasThisOne方法,但总是返回一个空数组。

我该如何进行此查询?

1 个答案:

答案 0 :(得分:1)

为什么使用type.toString()

我假设您的实体中有List<Type> types,对吗?然后查询也应该使用枚举,而不是它的字符串表示。

你可以使用:

getDatastore().createQuery(MyCollection.class)
   .field("types").equal(type).asList();

是的,即使对于数组也是如此。