2

Morphia を使用してマップされた ObjectId のリストがあります。Java では、マッピングは次のようになります。

public class Log {
    @Indexed
    public List<ObjectId> companyIds;
    ....
}

ただし、Mongo シェルでは、$elemMatch を使用して検索すると、無効な型についてエラーが表示されます。

> db.Log.find({ "companyIds" : { "$elemMatch" : ObjectId("5059e90d0364d02be740417a")}})
error: {
    "$err" : "invalid parameter: expected an object ($elemMatch)",
    "code" : 10065
}

ObjectId で $elemMatch を使用するために他に必要なことはありますか?

ありがとう

4

1 に答える 1

10

これを行うために を使用$elemMatchする必要はありません。クエリを実行するだけです

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

companyIds フィールドに指定された objectId が含まれるすべてのオブジェクトを検索します。

docsによると$elemMatch、配列要素の複数のフィールドと照合しようとしている場合にのみ必要です。「オブジェクトが期待される」と言っている理由は、引数として$elemMatch本格的なmongoクエリ(に渡すことができるものなど)を取るためです。find

于 2012-09-20T02:01:59.990 に答える