2

我有一个使用 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
}

我还需要做什么才能将 $elemMatch 与 ObjectId 一起使用吗?

谢谢

4

1 回答 1

10

您不需要使用$elemMatch来执行此操作。您可以只运行查询

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

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

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

于 2012-09-20T02:01:59.990 回答