在MongoDB中查找ObjectId数组中的元素

时间:2012-09-20 01:46:29

标签: mongodb morphia

我有一个使用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还有什么我需要做的吗?

由于

1 个答案:

答案 0 :(得分:10)

您无需使用$elemMatch来执行此操作。您只需运行查询

即可
{ "companyIds" : ObjectId("...") }

将查找其companyIds字段包含给定objectId的所有对象。

根据docs,只有当您尝试匹配数组元素上的多个字段时才需要$elemMatch。它说“预期一个对象”的原因是$elemMatch采用了完整的mongo查询(例如,你可以传递给find的东西)作为它的参数。