使用 Morphia 过滤 HashMap

c4k*_*c4k 1 hashmap mongodb morphia

我的实体包含此字段:

@Embedded
public Map<String, Integer> map;
Run Code Online (Sandbox Code Playgroud)

在我想针对此映射进行过滤的查询中,所有元素都必须具有传入参数的映射的相同键/值。

我按照这里的建议尝试了这个:

for (Entry<String, Integer> e : myMap.entrySet()) {
    query.filter("map." + e.getKey(), e.getValue());
}
Run Code Online (Sandbox Code Playgroud)

它正在工作,但我有警告,我不喜欢它:

[warn] o.m.m.q.QueryValidator - The type(s) for the query/update may be inconsistent; using an instance of type 'java.lang.Integer' for the field 'models.MyModel.map' which is declared as 'java.util.Map'
[warn] o.m.m.q.QueryValidator - Validation warnings: 
[Validation failed: 'Type java.util.Map may not be queryable with value '2' with class java.lang.Integer']
Run Code Online (Sandbox Code Playgroud)

所以我正在寻找另一种方法来做到这一点。我尝试了所有这些,但没有一个工作:

query.field("map").equal(myMap);
query.filter("map", myMap);
query.field("map").hasAllOf(myMap.entrySet());
query.field("map").hasAllOf(myMap.keySet());
Run Code Online (Sandbox Code Playgroud)

是地图排序问题还是其他问题?有任何想法吗 ?谢谢。

jto*_*ron 5

这是 morphia 中的一个错误:https : //github.com/mongodb/morphia/issues/641。您需要在 Query 实例上禁用验证:query.disableValidation();

他们的分析是:“这听起来不正确,虽然查询验证失败应该只是在日志中,而不是抛出异常,所以这不应该是一个阻碍。” 截至我回答时,他们已将其标记为“post-1.0”里程碑中的解决方案。