按字符串列表中的元素查询 MongoDB 与吗啡

Query MongoDB with morphia by element on String list

这是文档格式:

{
 "_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 方法,但总是 returns 一个空数组。

我该如何查询?

为什么要使用 type.toString()

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

你或许可以使用:

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

是的,即使是数组。