我有一个使用Morphia映射的ObjectId列表。在java中,映射看起来像这样:
public class Log {
@Indexed
public List<ObjectId> companyIds;
....
}
然而,在Mongo shell中,当我使用$ elemMatch进行搜索时,它会抱怨无效类型。
> db.Log.find({ "companyIds" : { "$elemMatch" : ObjectId("5059e90d0364d02be740417a")}})
error: {
"$err" : "invalid parameter: expected an object ($elemMatch)",
"code" : 10065
}
使用带有ObjectId的$ elemMatch还有什么我需要做的吗?
由于
答案 0 :(得分:10)
您无需使用$elemMatch
来执行此操作。您只需运行查询
{ "companyIds" : ObjectId("...") }
将查找其companyIds字段包含给定objectId的所有对象。
根据docs,只有当您尝试匹配数组元素上的多个字段时才需要$elemMatch
。它说“预期一个对象”的原因是$elemMatch
采用了完整的mongo查询(例如,你可以传递给find
的东西)作为它的参数。