[英]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进行联接。 因此,这是我正在考虑的步骤:
以下是我的实现方法。
我正在使用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.