gpt4 book ai didi

java - MongoDB : find matching elements in an array with given attributes using java driver

转载 作者:可可西里 更新时间:2023-11-01 09:57:26 25 4
gpt4 key购买 nike

试图将我的游戏迁移到 mongodb (linux-i686-2.4.6) 但到目前为止有很多困难:(一个是那个;我有一个名为 gamesTable 的集合,其中包含以下元素,我想在 playerHistories 数组中进行搜索。

{
"_id": {
"$oid": "52307b8fe4b0fc612dea2c70"
},
"id": "52307b8fe4b0fc612dea2c70", "name": "poker", "initTime": 1378909071070, "startTime": 1378909071098, "endTime": 1378909071134,
"playerHistories": [
{
"playerId": "52307b8fe4b0fc612dea2c6e",
"time": 1378909071098,
"event": "EnteredGame"
} ,
{
"playerId": "52307b8fe4b0fc612dea2c6f",
"time": 1378909071098,
"event": "EnteredGame"
} ,
{
"playerId": "52307b8fe4b0fc612dea2c6f",
"time": 1378909071117,
"event": "LostGame"
} ,
{
"playerId": "52307b8fe4b0fc612dea2c6e",
"time": 1378909071128,
"event": "WonGame"
}
]
},
{
"_id": {
"$oid": "52307b8fe4b0fc612dea2c71"
}, "id": "52307b8fe4b0fc612dea2c71", "name": "poker", "initTime": 1378909071150, "startTime": 1378909071165, "endTime": 1378909071189,
"playerHistories": [
{
"playerId": "52307b8fe4b0fc612dea2c6e",
"time": 1378909071165,
"event": "EnteredGame"
} ,
{
"playerId": "52307b8fe4b0fc612dea2c6f",
"time": 1378909071165,
"event": "EnteredGame"
} ,
{
"playerId": "52307b8fe4b0fc612dea2c6e",
"time": 1378909071176,
"event": "LostGame"
} ,
{
"playerId": "52307b8fe4b0fc612dea2c6f",
"time": 1378909071183,
"event": "WonGame"
}
]
}

我想找到玩家赢得的游戏,在我们的示例中是;

{ "playerHistories.playerId" : "52307b8fe4b0fc612dea2c6f" , "playerHistories.event" : "WonGame"}}

我读到我应该使用 $elemMatch 来匹配数组中的元素,但是它什么都不返回:(

这是我使用的代码

    BasicDBObject elemMatch = new BasicDBObject();
elemMatch.put("playerHistories.playerId", player1.getId());
elemMatch.put("playerHistories.event", "WonGame");
BasicDBObject foo = new BasicDBObject();
foo.put("$elemMatch", elemMatch);
gamesTable.find(foo);

我做错了什么?

最佳答案

感谢 parvin,我发现它改变了他的解决方案。

    DBObject statusQuery = new BasicDBObject("event", "WonGame");
statusQuery.put("playerId", "52307b8fe4b0fc612dea2c6f");
DBObject fields = new BasicDBObject("$elemMatch", statusQuery);
DBObject query = new BasicDBObject("playerHistories",fields);
gamesTable.find(query);

关于java - MongoDB : find matching elements in an array with given attributes using java driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18744178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com