这是文件格式:
{
"_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
方法,但总是返回一个空数组。
我该如何进行此查询?
答案 0 :(得分:1)
为什么使用type.toString()
?
我假设您的实体中有List<Type> types
,对吗?然后查询也应该使用枚举,而不是它的字符串表示。
你可以使用:
getDatastore().createQuery(MyCollection.class)
.field("types").equal(type).asList();
是的,即使对于数组也是如此。