续集NodeJS:是否支持这些function?
以下是关于sequelize( sequelize project site )支持的特性的一些问题,我想在决定是否使用它之前先澄清一下:
-
链接(效率):当链接多个查询时,这些请求是否被收集到数据库中(作为一批操作),还是每个都单独发送?
-
链接(成功/错误):链接多个查询时,何时发出成功事件,发生什么错误? 只有所有操作都成功了,“成功”才会发射出去吗? 如果发生错误,是否会回滚所有操作(即将链操作视为事务)
-
过滤关联:说一个
Crowd
对象有关系Crowd.hasMany(Person)
。 您可以通过执行crowd.getPersons()
来获取所有关联的人,但是可以select其中的一个子集,比如crowd.getPersons({where: { age: 30 }})
? -
获取通过两个或多个步骤相关的关联对象:将
Crowd
对象表示为关系Crowd.hasMany(Person)
和Person
具有Person.hasMany(Pet)
关系。 是否有可能通过执行诸如crowd.getPersons().getPets()
类的东西来获得人群中的所有宠物,如果是这样,这个请求会作为多个请求发送到数据库,还是只有一个请求? -
“深”对象:我想定义一个人作为对象:
sequelize.define('Person', { name: { first: <a string>, last: <a string> } });
这是允许的吗? (请注意,名称不会是数据库表的列,但首先和最后一个将是)
-
“计算”对象:是否可以添加一个字段到从对象的其他字段计算的对象? 例如:
sequelize.define('Person', { name: { first: <a string>, last: <a string>, full: <name.first + ' ' + name.last> // <-- this field } });
因此,
name.full
字段实际上并不存储在数据库(这是浪费空间),而只是从另外两个计算?
1:您可以使用超级duper批处理QueryChainer。 不过,每个命令都会被分开执行。
2:使用QueryChainer,只有一切正常,才会触发成功事件。 如果发生一个或多个错误,则会触发错误。 绑定方法的第一个参数将是一个错误数组。
3 .:嗯,我不是100%确定,但恕我直言,它还没有支持。
4:不可能,但更复杂,不太花哨:
crowd.getPeople().success(function(people) { people.forEach(function(person){ person.getPets().success... // you have to collect them on your own }) })
5:不。 但我也不明白你为什么这样做。
6 .:是的,请查看http://sequelizejs.com/docs/1.7.8/models#expansion-of-models和:
Person = sequelize.define('Person', {foo:Sequelize.STRING}, { instanceMethods: { fullname: function() { return this.firstName + ' ' + this.lastName } } })