我的用户对象是这样的:
--not feature
在robomongo中我想做一个这样的简单查询: 返回那些拥有超过100技能的玩家(在内部阵列中)的用户对象。
这样做的方法是什么?
答案 0 :(得分:1)
您真正需要做的就是通过"dot notation":
测试价值db.users.find({ "players.skill": { "$gt": 100 } })
并过滤掉任何没有超过该级别技能的玩家的用户。
如果您想“过滤”低于该级别的玩家本身,请改用.aggregate()
:
db.users.aggregate([
{ "$match": {
"players.skill": { "$gt": 100 }
}},
{ "$project": {
"name": 1,
"players": {
"$setDifference": [
{ "$map": {
"input": "$players",
"as": "player",
"in": {
"$cond": [
{ "$gt": [ "$$player.skill", 100 ] },
"$$player",
false
]
}
}},
[false]
]
}
}}
])
这不仅可以选择具有较高技能的玩家,而且还可以通过较低的技能从结果中移除所有玩家。