一对多关系——变量所有者集合属性
sails.js one to many relationship - variable owner collection attribute
在sailsjs.org的文档中,所有者端的一对多关系是这样定义的
//user.js
module.exports = {
attributes: {
name:'STRING',
age:'INTEGER',
pets:{
collection: 'pet',
via: 'owner'
}
}
}
'pet'是一个常量,在SQL数据库中具有一致的模式。如果我想有一个超类宠物和子类具有独特的属性(不同的行数)?假设我有一只章鱼和一只狗。狗有四条腿和两只耳朵。章鱼有8根触须。唯一的共性将被抽象到宠物类中(颜色、名字、年龄)。
如果这是不可能的,我将不得不诉诸于这样的东西吗?
//user.js
module.exports = {
attributes: {
name:'STRING',
age:'INTEGER',
dogs:{
collection: 'dog',
via: 'owner'
},
octopuses:{
collection: 'octopus',
via: 'owner'
}
}
}
然而,如果我想引入更多的宠物,如鹰(会飞),鹦鹉(会说话),这可能会变得相当混乱,如果我要使用SQL数据库,这将导致许多null。也许mongoDB将是理想的吗?
在Waterline中,每个模型都被视为SQL数据库中的一个表或Mongo中的一个集合。如果狗的属性与章鱼完全不同,那么你可以将它们分成单独的表,并将它们链接到用户。我认为最简单的方法就是在Pet模型中添加一个type
属性。
// user.js
module.exports = {
attributes: {
name:'STRING',
age:'INTEGER',
pets:{
collection: 'pet',
via: 'owner'
}
}
}
// pet.js
module.exports = {
attributes: {
name:'STRING',
type: 'STRING',
owner:{
model: 'user'
}
}
}
这将允许如下查询:
User.find().populate('pets', { type: 'dog' });
另一个选择是将宠物属性存储在json对象中。这是目前无法搜索的,但将允许您以非规范化的方式存储有关宠物的各种信息。
// pet.js
module.exports = {
attributes: {
name:'STRING',
type: 'STRING',
characteristics: {
type: 'json'
},
owner:{
model: 'user'
}
}
}
这将允许你拥有像下面这样的宠物:
[{
id: 1,
name: 'fluffy',
type: 'dog',
characteristics: {
food: 'mice',
limbs: 4,
fur: 'white'
},
owner: 1
},
{
id: 2,
name: 'inky',
type: 'octopus',
characteristics: {
habitat: 'ocean'
tentacles: 8,
canChooseWorldCupWinners: true
},
owner: 1
}]
相关文章:
- 将css属性添加到对象的集合中
- 如何更改与Backbone集合中的模型相关联的几个元素的css属性
- 从骨干集合筛选模型,然后为这些模型设置属性
- 在 Forerunner 数据库集合中创建主键时,key 属性是否可以位于集合对象的对象内部
- 如何在集合中指定模型的一个属性
- 主干:如何保存模型集合中模型的属性更改
- BackboneJS重新排列集合中模型的最佳方式,同时为每个模型维护0索引的有序属性
- 集合作为 EmberJS 中的属性?(一对多关系)
- 我怎样才能得到“;类型“;集合中每个属性的
- 根据三个模型属性对主干集合进行排序
- 根据模型属性对主干集合进行排序
- 控制台中的不确定性主干集合属性分配
- 在添加/删除/重置时更新骨干集合属性
- 一对多关系——变量所有者集合属性
- 一个jquery组合多个.html集合属性
- js查询模型通过集合属性过滤
- 主干集集合属性(用于url)
- 为什么jQuery集合属性没有反映在.html()中?
- 如何使用javascript将属性从一个集合属性转换为一个新属性
- 不能交换模型集合属性