2

ゲームプレーヤーの詳細を含む、次のようなMongoDBコレクションがあります。

{
    ...
    "fields" : {
            "playername" : "Koala",
            ...
    }
    ...
}

そして、配列内のプレーヤーの ID を取得したいと考えています。したがって、たとえば、私はこれを行います:

// players: ["Koala", "Cactus"]
Criteria base = Criteria.where("fields.playername").in(players);
DBObject match = base.getCriteriaObject();
List<?> userDetailIds = playersCollection.distinct("_id", match);

オブジェクト ( ) のリスト ( com.mongodb.BasicDBList) があります。しかし今、そのリストを新しいクエリで使用したいと考えています。たとえば、それらのプレーヤーのすべてのバッジを取得します。バッジ コレクション:ObjectIdorg.bson.types.ObjectId$in

{
        "badgeName": "MongoDB Killer", 
        "userDetailID" : "525c4be1975ac2a8f4a64c6f"
        ...
}

Java の場合:

mongo.find(Query.query(Criteria.where("userDetailID").in(userDetailIds)), Badges.class);

オブジェクトがuserDetailIds含まれており、フィールドであるため、これは機能しません。BasicDBList をパラメーターとして使用するにはどうすればよいですか? または: s の代わりに IDの配列を取得できますか?ObjectIduserDetailIDString$inStringObjectId

ありがとう!

PD。リストを繰り返し処理してに変換したくありませんList<String>

4

1 に答える 1

0

インスタンスを 24 バイトの 16 進文字列表現にtoHexString()変換するメソッドを使用します。ObjectId

List<ObjectId> objIds = playersCollection.distinct("_id", match);
List<String> userDetailIds = new ArrayList<String>();
for (ObjectId objId : objIds) {
    userDetailIds.add(objId != null ? objId.toHexString() : null);
}

mongo.find(Query.query(Criteria.where("userDetailID").in(userDetailIds)), Badges.class);
于 2015-11-06T10:50:29.133 に答える