Node.js 续集多对多格式化程序

Node.js 续集多对多格式化程序,node.js,sequelize.js,Node.js,Sequelize.js,我有以下关系: var Order = sequelize.define('order', { id : { type : Sequelize.INTEGER, primaryKey : true, autoIncrement : true }, amount : { type : Sequelize.DOUBLE }, change : { type : Sequelize.DOUBLE }, stat

我有以下关系:

var Order = sequelize.define('order', {
  id : {
    type          : Sequelize.INTEGER,
    primaryKey    : true,
    autoIncrement : true
  },
  amount       : { type : Sequelize.DOUBLE },
  change       : { type : Sequelize.DOUBLE },
  status       : { type : Sequelize.ENUM('draft', 'placed', 'in_transit', 'fulfilled', 'rejected') },
  statusReason : { type : Sequelize.STRING },
  address      : { type : Sequelize.STRING },
  latitude     : { type : Sequelize.DOUBLE },
  longitude    : { type : Sequelize.DOUBLE }
})

var Beverage = sequelize.define('beverage', {
  id : {
    type          : Sequelize.INTEGER,
    primaryKey    : true,
    autoIncrement : true
  },
  name    : { type : Sequelize.STRING },
  picture : { type : Sequelize.STRING },
  price   : { type : Sequelize.DOUBLE },
  max     : { type : Sequelize.DOUBLE },
})

var OrderBeverage = sequelize.define('orderBeverage', {
  id : {
    type          : Sequelize.INTEGER,
    primaryKey    : true,
    autoIncrement : true
  },
  orderId    : { type : Sequelize.INTEGER },
  beverageId : { type : Sequelize.INTEGER },
  amount     : { type : Sequelize.INTEGER }
})

Order.hasMany(OrderBeverage, { as : 'beverages' })
OrderBeverage.belongsTo(Beverage)
OrderBeverage.belongsTo(Order)
因此,如果我做一个包含关系的简单查询,我有以下来源和结果:

let orders = yield Order.findAll({
  include : [{
    model      : Order.Beverage,
    as         : 'beverages',
    attributes : ['createdAt'],
    include    : [ Beverage ]
  }]
})
以及生成的json:

[
  {
    "id": 2,
    "amount": 0,
    "change": 0,
    "status": "placed",
    "statusReason": "wrong address given",
    "address": "street x, michigan",
    "latitude": 0,
    "longitude": 0,
    "createdAt": "2016-01-12T22:39:32.000Z",
    "updatedAt": "2016-01-13T21:05:06.000Z",
    "beverages": [
      {
        "createdAt": "2016-01-12T23:10:48.000Z",
        "beverage": {
          "id": 1,
          "name": "Vodka",
          "picture": "somepic",
          "price": 30,
          "max": 5,
          "createdAt": "2016-01-12T22:26:10.000Z",
          "updatedAt": "2016-01-12T22:26:10.000Z"
        }
      }
    ]
  }
]
我需要使属性
饮料
成为饮料内容的数组,而不是饮料内容在
饮料
键内的
{createdAt,beverage}
数组

最终结果如下所示:

[
  {
    "id": 2,
    "amount": 0,
    "change": 0,
    "status": "placed",
    "statusReason": "wrong address given",
    "address": "street x, michigan",
    "latitude": 0,
    "longitude": 0,
    "createdAt": "2016-01-12T22:39:32.000Z",
    "updatedAt": "2016-01-13T21:05:06.000Z",
    "beverages": [
      {
          "id": 1,
          "name": "Vodka",
          "picture": "somepic",
          "price": 30,
          "max": 5,
          "createdAt": "2016-01-12T22:26:10.000Z",
          "updatedAt": "2016-01-12T22:26:10.000Z"
      }
    ]
  }
]

我已经搜索了文档,没有找到它。有什么想法吗?

好的,所以我想出了如何做到这一点。无论如何,它都不是直观的

与其使用
命令,不如使用与
命令有许多关系的

Order.hasMany(OrderBeverage, { as : 'beverages' })
Order.belongsToMany(Beverage, { through : 'orderBeverage' })
我们必须通过
OrderBeverage
使用
饮料的
关系:

Order.hasMany(OrderBeverage, { as : 'beverages' })
Order.belongsToMany(Beverage, { through : 'orderBeverage' })
这样,我们只需将查询修改为:

let orders = yield Order.findAll({
  include : [{
    model : Beverage
  }]
})
我认为这没有多大意义,因为饮料属于许多订单饮料,而非订单通过订单饮料属于许多饮料

从某种意义上说,饮料属于许多订单,通过订单饮料


也许我误解了这个想法和概念…

好吧,所以我想出了如何做到这一点。无论如何,它都不是直观的

与其使用
命令,不如使用与
命令有许多关系的

Order.hasMany(OrderBeverage, { as : 'beverages' })
Order.belongsToMany(Beverage, { through : 'orderBeverage' })
我们必须通过
OrderBeverage
使用
饮料的
关系:

Order.hasMany(OrderBeverage, { as : 'beverages' })
Order.belongsToMany(Beverage, { through : 'orderBeverage' })
这样,我们只需将查询修改为:

let orders = yield Order.findAll({
  include : [{
    model : Beverage
  }]
})
我认为这没有多大意义,因为饮料属于许多订单饮料,而非订单通过订单饮料属于许多饮料

从某种意义上说,饮料属于许多订单,通过订单饮料

也许我误解了这个想法和概念