Sails.js:如何使用模型关联填充数组

时间:2014-04-21 04:51:34

标签: javascript node.js mongodb sails.js

我正在使用" sails":" ~0.10.0-rc5"," sails-mongo":" ^ 0.10。 0-RC3&#34 ;. 我有2个型号:Invoice,Item。

发票型号

Invoice: {
    name: 'sample 1',
    items: [1,2] // 1,2 is id of Item model
}

项目模型

Item {
    id: 1,
    name: "king"
}
Item {
    id: 2,
    name: 'queen'
}

我希望结果为:

Invoice: {
    name: 'sample 1',
    items: [{
        id: 1,
        name: "king"
    }, {
        id: 2,
        name: 'queen'
    }]
}

我看了model associations from the sails docs,但我不知道如何在我的情况下使用它。

2 个答案:

答案 0 :(得分:1)

您的模型将如下所示:

attributes: {
    name: "STRING"
    // You don't need the ID field as this is automatically created for you
}

您的发票模型如下所示:

attributes: {
    name: "STRING"
    items: {
        collection: "item",
        via: "item"
    }
}

现在创建一些 item 模型的文档。

sails> ModelNameOfItem.create({name:'MyFirstItem'}).exec(console.log)
null { name: 'MyFirstItem',
  createdAt: Tue Feb 11 2014 15:45:33 GMT-0600 (CST),
  updatedAt: Tue Feb 11 2014 15:45:33 GMT-0600 (CST),
  _id: "some_id_created_by_mongo" }

现在创建发票模型的文档。

sails> ModelNameOfInvoice.create({name:'MyFirstInvoice', items:"the_id from_item_created"}).exec(console.log)
null { name: 'MyFirstInvoice',
  createdAt: Tue Feb 11 2014 15:45:33 GMT-0600 (CST),
  updatedAt: Tue Feb 11 2014 15:45:33 GMT-0600 (CST),
  _id: "some_id_created_by_mongo" }

多数民众赞成!要进行查询,请使用populate方法。

sails> Invoice.find({name:'MyFirstInvoice'}).populate('items').exec(console.log);

答案 1 :(得分:1)

正确的答案是: 在发票模型中:

...
items: {
  collection: 'item'
}