Mongodb找到满足条件的所有子文档的文档

时间:2012-05-07 21:50:00

标签: mongodb

我的数据库中有Game集合:

var game = {
  players: [{username:"user1", status:"played"},
            {username:"user2", status:"accepted"}]
}

据我所知这样的查询:db.games.find({"players.status":"played"})会给我所有游戏,其中至少有一名玩家的状态为“已玩”。如何找到状态为“已播放”的所有玩家的游戏?

3 个答案:

答案 0 :(得分:11)

如果您只有另一个状态而不是“已播放”,请使用以下查询:

db.games.find({ "players.status": { $ne:"accepted" } })

您可以调整查询以处理更多状态值,只要它们在查询时都是已知的。

答案 1 :(得分:0)

我也遇到了这个问题。我试图使用implementation 'com.google.android.gms:play-services-maps:17.0.0' implementation 'com.google.android.gms:play-services-location:17.0.0' ,但几乎没有进展。它有助于使我对问题有所了解,而改用$all。我wrote about what I found here

根据您的情况,您应该可以执行以下操作:

$not

查找播放器状态不等于db.games.find({ players: { $not: { $elemMatch: { status: { $ne: "played" } } } } }) 的所有文档,然后返回该集合的倒数。这样做的好处是,您不必担心添加更多状态值。

答案 2 :(得分:-1)

使用聚合框架的$ unwind功能:

db.collection.aggregate([{$展开:" $ players.status"},{$匹配:{" players.status":"播放&#34 ;},{$项目:{" _id":0," players.status":1}}])

(看看这个答案:https://stackoverflow.com/a/15082321/1214167