麻烦在使用monk.js的nodejs中使用mongodb $位置指示器

时间:2014-09-28 09:20:39

标签: node.js mongodb monk

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

结束状态在他们的会话中我现在有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对象

使用monk的nodejs

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

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

问题

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

否则我将非常感谢任何其他想法/方法来实现最终状态:)

1 个答案:

答案 0 :(得分:0)

也许这会有所帮助:

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