js:从列表填充关联
Waterline.js: Populate association from list
有人知道是否可以使用水线关联填充另一个模型的id列表吗?我试着让多对多联系起作用,但我不认为它适用于这里,因为关系的一方不知道另一方。意思是,一个用户可以是许多组的一部分,但是组不知道哪些用户属于它们。例如,我目前正在使用mongodb中的数据模型,看起来像:
// Group
{
_id: group01,
var: 'somedata',
},
{
_id: group02,
var: 'somedata',
},
{
_id: group03,
var: 'somedata',
}
// User
{
_id: 1234,
name: 'Jim',
groups: ['group01', 'group03']
}
我想弄清楚是否有可能在查询用户时以以下方式设置具有关联的模型:
// Req: /api/users/1234
// Desired result
{
id: 1234,
name: 'Jim',
groups: [
{
_id: group01,
var: 'somedata',
},
{
_id: group03,
var: 'somedata',
}
]
}
是的,在sails 0.10中支持关联。x开始。下面是如何设置模型
你的用户模型是这样的:
// User.js
module.exports = {
tableName: "users",
attributes: {
name: {
type: "string",
required: true
},
groups: {
collection: "group",
via: "id"
}
}
};
你的组模型是这样的:
// Group.js
module.exports = {
tableName: "groups",
attributes: {
name: {
type: "string",
required: "true"
}
}
};
像这样设置模型将在DB中创建三个表:
用户,组织和group_id__user_group
最后一个表由waterline创建以保存关联。现在继续创建组。创建组之后,继续创建user。下面是创建新用户
的示例POST请求{
"name": "user1",
"groups": ["547d84f691bff6663ad08147", "547d850c91bff6663ad08148"]
}
这将以以下方式向group_id__user_group插入数据
{
"_id" : ObjectId("547d854591bff6663ad0814a"),
"group_id" : ObjectId("547d84f691bff6663ad08147"),
"user_groups" : ObjectId("547d854591bff6663ad08149")
}
/* 1 */
{
"_id" : ObjectId("547d854591bff6663ad0814b"),
"group_id" : ObjectId("547d850c91bff6663ad08148"),
"user_groups" : ObjectId("547d854591bff6663ad08149")
}
user_groups列是用户id。其中group_id为组id。现在,如果使用GET请求获取用户,您的响应将如下所示:
{
"groups": [
{
"name": "group1",
"createdAt": "2014-12-02T09:23:02.510Z",
"updatedAt": "2014-12-02T09:23:02.510Z",
"id": "547d84f691bff6663ad08147"
},
{
"name": "group2",
"createdAt": "2014-12-02T09:23:24.851Z",
"updatedAt": "2014-12-02T09:23:24.851Z",
"id": "547d850c91bff6663ad08148"
}
],
"name": "user1",
"createdAt": "2014-12-02T09:24:21.182Z",
"updatedAt": "2014-12-02T09:24:21.188Z",
"id": "547d854591bff6663ad08149"
}
请注意,组没有嵌入到用户集合中。Waterline从groups、users和group_id__user_group中获取数据,向您显示此结果。
同样,如果你想在你的控制器中这样做,你需要像这样执行
User.findOne({'id': "547d854591bff6663ad08149"})
.populate('groups')
.exec(function (err, user){
// handle error and results in this callback
});
如果没有populate('groups'),您将无法获得groups数组。
相关文章:
- 如何设置html元素填充的动画
- 如何使用jquery在填充自动完成的值后使文本框只读
- 如何通过ajax刷新JSF填充的javascript变量
- 用与线条相同的颜色填充多折线图上的点
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 带有填充属性的SVG矩形显示在包含元素的上方插入框阴影
- 用我的json数据填充JQuery DataTable
- 使用 jQuery 检查所有值是否为空或已填充
- 为什么不't我的变量在我的控制器中填充后在我的视图中呈现
- 如何让typeahead在我的搜索栏中填充自定义参数
- 如何使用JSON字符串中的jQuery填充下拉框
- Sails js是否自动填充关联
- 如何动态填充(关联)数组
- 如何在 Javascript 中正确动态填充关联数组
- 数据表将字段值关联到按钮,而 ajax 填充表
- 尝试使用 填充将两个子集合关联到父集合
- Sails.js/Waterline填充深度嵌套关联
- js:从列表填充关联
- Javascript动态填充关联数组并获取值
- 使用jQuery用关联数组中的数据填充表单