我的数据库中有Game集合:
var game = {
players: [{username:"user1", status:"played"},
{username:"user2", status:"accepted"}]
}
据我所知这样的查询:db.games.find({"players.status":"played"})
会给我所有游戏,其中至少有一名玩家的状态为“已玩”。如何找到状态为“已播放”的所有玩家的游戏?
答案 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}}])