SailsJS 协会
SailsJS association
我正在尝试与两个模型建立关联:
用户 -> 模块
我的用户模型:
module.exports = {
tableName: 'user',
autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
username: {
type: 'string',
required: true,
size: 45
},
password: {
type: 'string',
required: true,
size: 45
},
firstname: {
type: 'string',
required: true,
size: 45
},
lastname: {
type: 'string',
required: true,
size: 45
},
grades: {
type: 'json',
defaultsTo:[]
},
....
模块型号:
module.exports = {
tableName: 'module',
autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
name: {
type: 'string',
required:true
},
spec_id: {
type: 'integer',
required: true,
enum: [1, 2, 3, 4]
},
}
};
用户集合如下:
{
"_id": {
"$oid": "58763b49458a93f4785fff0e"
},
"grades": [
{
"grade": 7.5,
"mod_id": "587686a4f36d284ed588d72c",
"try": 1
},
{
"grade": 6.4,
"mod_id": "587686a4f36d284ed588d72c",
"try": 2
}
],
"role_id": "58766274734d1d50c512f493",
"class_id": "58768634f36d284ed588d6e6",
"spec_id": "587686a4f36d284ed588d72c",
"username": "-",
"password": "-",
"firstname": "-",
"lastname": "-",
"email": "test@test.nl",
"birthdate": "1995-05-1995",
"_csrf": "null"
}
我用来记录以上结果的查询:
var findOneUser = User.find();
findOneUser.where({id: req.session.userID});
findOneUser.populateAll()
findOneUser.exec(function callBack(err,user){
var singleUser = user.pop().toJSON();
console.log(singleUser);
});
我怎样才能在我的模型中实现以下目标(使用 user.grades.mod_id 作为连接键),所以在我的每个 中都有一个 module 对象成绩 个对象(我正在使用 MongoDB)
{
"_id": {
"$oid": "58763b49458a93f4785fff0e"
},
"grades": [
{
"grade": 7.5,
"module": {
"name": "bla",
"description": "-",
"spec_id": 1
},
"try": 1
},
{
"grade": 6.4,
"module": {
"name": "bla",
"description": "-",
"spec_id": 1
},
"try": 2
}
],
"role_id": "58766274734d1d50c512f493",
"class_id": "58768634f36d284ed588d6e6",
"spec_id": "587686a4f36d284ed588d72c",
"username": "-",
"password": "-",
"firstname": "-",
"lastname": "-",
"email": "test@test.nl",
"birthdate": "-",
"_csrf": "null"
}
我看到了很多嵌套关联;但我认为这有点不同,也发现了这个.. sails.js nested models 有点相似,但与这个例子相比,我想加入 [=38= 中的值] JSON 对象.
不容易理解你哪里有问题,因为在查看文档后很简单。
在User.js型号中:
mod_id: {
model: 'module' // or modules depends how you have it declared
}
在 Module.js 型号中:
users: {
collection: 'user',
via: 'mod+id'
}
有两种方法可以解决这个问题:
创建一个单独的成绩模型。它将单独存储在 MongoDB 中(不以首选方式使用 Mongo)
或者在获取用户后编写代码填充模块
User.findOne(1).exec(function(err, user) {
user = user.toJSON();
var moduleIds = _.map(user.grades, 'mod_id');
Module.find(moduleIds).exec(function(err, modules) {
_.forEach(user.grades, function(grade) {
var module = _.find(modules, { 'id': grade.mod_id });
grade.module = module;
});
console.log('User', user);
return;
});
});
我正在尝试与两个模型建立关联:
用户 -> 模块
我的用户模型:
module.exports = {
tableName: 'user',
autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
username: {
type: 'string',
required: true,
size: 45
},
password: {
type: 'string',
required: true,
size: 45
},
firstname: {
type: 'string',
required: true,
size: 45
},
lastname: {
type: 'string',
required: true,
size: 45
},
grades: {
type: 'json',
defaultsTo:[]
},
....
模块型号:
module.exports = {
tableName: 'module',
autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
name: {
type: 'string',
required:true
},
spec_id: {
type: 'integer',
required: true,
enum: [1, 2, 3, 4]
},
}
};
用户集合如下:
{
"_id": {
"$oid": "58763b49458a93f4785fff0e"
},
"grades": [
{
"grade": 7.5,
"mod_id": "587686a4f36d284ed588d72c",
"try": 1
},
{
"grade": 6.4,
"mod_id": "587686a4f36d284ed588d72c",
"try": 2
}
],
"role_id": "58766274734d1d50c512f493",
"class_id": "58768634f36d284ed588d6e6",
"spec_id": "587686a4f36d284ed588d72c",
"username": "-",
"password": "-",
"firstname": "-",
"lastname": "-",
"email": "test@test.nl",
"birthdate": "1995-05-1995",
"_csrf": "null"
}
我用来记录以上结果的查询:
var findOneUser = User.find();
findOneUser.where({id: req.session.userID});
findOneUser.populateAll()
findOneUser.exec(function callBack(err,user){
var singleUser = user.pop().toJSON();
console.log(singleUser);
});
我怎样才能在我的模型中实现以下目标(使用 user.grades.mod_id 作为连接键),所以在我的每个 中都有一个 module 对象成绩 个对象(我正在使用 MongoDB)
{
"_id": {
"$oid": "58763b49458a93f4785fff0e"
},
"grades": [
{
"grade": 7.5,
"module": {
"name": "bla",
"description": "-",
"spec_id": 1
},
"try": 1
},
{
"grade": 6.4,
"module": {
"name": "bla",
"description": "-",
"spec_id": 1
},
"try": 2
}
],
"role_id": "58766274734d1d50c512f493",
"class_id": "58768634f36d284ed588d6e6",
"spec_id": "587686a4f36d284ed588d72c",
"username": "-",
"password": "-",
"firstname": "-",
"lastname": "-",
"email": "test@test.nl",
"birthdate": "-",
"_csrf": "null"
}
我看到了很多嵌套关联;但我认为这有点不同,也发现了这个.. sails.js nested models 有点相似,但与这个例子相比,我想加入 [=38= 中的值] JSON 对象.
不容易理解你哪里有问题,因为在查看文档后很简单。
在User.js型号中:
mod_id: {
model: 'module' // or modules depends how you have it declared
}
在 Module.js 型号中:
users: {
collection: 'user',
via: 'mod+id'
}
有两种方法可以解决这个问题:
创建一个单独的成绩模型。它将单独存储在 MongoDB 中(不以首选方式使用 Mongo)
或者在获取用户后编写代码填充模块
User.findOne(1).exec(function(err, user) {
user = user.toJSON();
var moduleIds = _.map(user.grades, 'mod_id');
Module.find(moduleIds).exec(function(err, modules) {
_.forEach(user.grades, function(grade) {
var module = _.find(modules, { 'id': grade.mod_id });
grade.module = module;
});
console.log('User', user);
return;
});
});