繁体   English   中英

使用node.js在mongodb中联接记录

[英]Joining records in mongodb with node.js

我在项目中使用 我有两个模型,用户和权限。

user

{
     c_name: 'string',
     e_name: 'string'
}

permission

user: {
    type: 'string',
    required: true,
    unique: true
},

permissions: {
    type: 'array'
}

我想使用他们的user.id查找所有具有相应权限的用户。 但是,由于我使用的是mongodb,而不是关系数据库,因此无法使用SQL进行联接。 因此,这是我正在考虑的步骤:

  1. 获得所有用户
  2. 遍历用户
  3. 为每个用户找到他们的许可
  4. 向用户添加权限
  5. 输出用户数组。

以下是我的实现方法。

我正在使用node.async排队我的电话。

UserController.js

var async = require('async'); // using node.async

module.exports = {
    find: function (req, res){
        async.auto({
        getUsers: function(callback){
            User.find().done(function(err, users){
                callback(err, users);
            });
        },
        getPermission: ['getUsers', function(callback, users){
            async.each(users.getUsers, function (user, cb){
                Permission.findOne({'user': user.id}).done(function (err, permission){
                    if (permission)
                        user.permissions = permission.permissions;
                    cb();
                });
            }, function(err){
                callback(users);
            });
        }]
    }, function(err, results) {
         // console.log(results);
        res.send(results.getUsers);
    });
   }
}

有人可以提出更好的解决方案吗? 谢谢!

您可以通过两种选择来提高代码效率:升级到Sails v0.10(如果尚未升级),并使用内置的关联功能,或使用Mongo中的嵌入式文档。 如果选择选项一,则模型将如下所示:

用户属性

{
    c_name: 'string',
    e_name: 'string',
    permissions: {
        collection: 'permission',
        via: 'user'
    }
}

权限属性:

{
    permission: 'string', // or whatever
    user: {
        model: 'user'
    }
}

然后,您可以使用myUser.permissions.add(permissionId)继之以myUser.save(function(err, savedUser){...})或通过创建/更新具有其user属性集的permission实例来向user实例添加permission到用户ID。 要检索具有权限的用户,可以执行User.find(criteria).populate('permissions').exec(...)

您可以使用npm install sails@beta sails npm install sails@beta安装Sails v0.10。 这些文档位于http://beta.sailsjs.org ,但可能会随时更改。

要在Sails中使用Mongo中的嵌入式文档,只需在User.js添加一个permissions: 'array'属性,即可将现有permission模型合并到user 考虑到您现在的设置方式,每个User实例最多具有一个链接的Permission实例,实际上没有理由将它们作为两个单独的模型。 选项一的唯一真正好处是能够查询与用户不同的权限,即询问“哪些用户具有某某权限”或“多少用户具有级别x以上的权限”之类的问题? 如果这些问题与您的应用程序无关,则没有理由将permission保留为单独的模型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM