【发布时间】:2015-11-06 10:28:39
【问题描述】:
我有一个这样的 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);
太好了,我有一个 ObjectId 对象 (org.bson.types.ObjectId) 的列表 (com.mongodb.BasicDBList)。
但现在我想在新的$in 查询中使用该列表,例如,获取这些玩家的所有徽章。徽章收藏:
{
"badgeName": "MongoDB Killer",
"userDetailID" : "525c4be1975ac2a8f4a64c6f"
...
}
在 Java 中:
mongo.find(Query.query(Criteria.where("userDetailID").in(userDetailIds)), Badges.class);
这不起作用,因为userDetailIds 包含ObjectId 对象,而userDetailID 是String 字段。
如何将 BasicDBList 用作 $in 参数?
或者:
我可以获取String ID 数组而不是ObjectIds 吗?
谢谢!
PD。我不想遍历列表以将其转换为 List<String>。
【问题讨论】:
标签: java mongodb mongo-java mongo-java-driver