如何返回阵列中玩家技能大于100的mongodb用户对象?

时间:2015-10-08 09:34:18

标签: mongodb mongodb-query aggregation-framework

我的用户对象是这样的:

--not feature

在robomongo中我想做一个这样的简单查询: 返回那些拥有超过100技能的玩家(在内部阵列中)的用户对象。

这样做的方法是什么?

1 个答案:

答案 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]
            ]
        }
    }}
])

这不仅可以选择具有较高技能的玩家,而且还可以通过较低的技能从结果中移除所有玩家。