0

我正在尝试对我的数据库执行搜索并返回用户对应用程序的角色并将其存储在他们的会话中。

结束状态在他们的会话中我现在有 user.applications =

[
    {
    "_id": "oehgf12083310f1h30f",
    "name": "Internal",
    "roles": {
                 "send": true,
                 "create_template": true,
                 "edit_template": true
             }
    }
]

应用程序数据结构:

[
    {
        "_id": "oehgf12083310f1h30f",
        "name": "Internal",
        "permissions": [
            {
                "username": "username2",
                "roles": {
                    "send": true,
                    "create_template": true,
                    "edit_template": true
                }
            },
            {
                "username": "username1",
                "roles": {
                    "send": true,
                    "create_template": true,
                    "edit_template": false
                }
            }
        ]
    }
]

使用 mongodb 控制台

我可以执行此搜索并准确返回在他们的会话中填充 user.applications 对象所需的内容:

db.applications.find({
  "permissions.username": "username2"
}, {
  "permissions.$": true,
  name: true
}).pretty()

这将返回 username2 有权访问的所有应用程序,同时返回他们拥有的权限级别,并且只返回他们。所以不包括 username1 对象

在 nodejs 中使用和尚

find({
  "permissions.username": "username2" || req.query.username
}, {
  "permissions.$": true,
   name: true
}, function(err, docs) {});

现在此搜索返回 username2 和 username1 的用户对象,这是有问题的,因为我必须进一步处理以提取正确的权限。

问题

我怀疑和尚对我的搜索做了一些事情,导致它无法使用 $ 位置指示器,但如果我错了,请告诉我如何使用它来实现我所追求的。

否则,我将不胜感激任何其他想法/方法来实现该最终状态:)

4

1 回答 1

0

也许这有帮助:

find({permissions.username": "username2" || req.query.username }, { "permissions": { "$elemMatch": {"username": "username2"}}, name: true}, function(err, docs) {});
于 2014-09-28T10:21:28.590 回答