有没有标准的方法来扩展与 Sails、Mongo 和 Waterline 与 .findOne() 的关联?

Is there a standard way to expand associations with Sails, Mongo and Waterline with .findOne()?

我的模型包含与其他模型的关联,这些关联显然只是与它们的 ObjectId 一起存储。我想知道的是,是否有一种方法可以传递扩展所有关联或一组特定关联的选项。

所以 'item model' 看起来像这样(示例):

module.exports = {

  attributes: {
    name: {
      type: 'string',
      required: true
    },
    description:{
      type: 'string'
    },
    project: {
      model: 'project',
      required: true
    }, ...

当你这样做时:

item.save(function(error, item) { ... })

它会自动展开所有包含在'item.'中的关联,但是,如果你传入这个选项它不会展开:

item.save({ populate: false }, function(error, item) { ... })

我想知道为什么 'save' 会自动展开,我很好奇是否有办法让 'findOne' 也自动展开。我知道您不想总是扩展,因为它可能会占用内存,但这可能对 return 在某些时候完全扩展的对象很有用。

您想填充所有关联模型吗?

Model
    .findOne({name:''})
    .populateAll()
    .exec(
        function(error,result){}
    )

它将填充所有协会。如果你只想填充一个,你可以选择

Model
    .findOne({name:''})
    .populate('project')
    .exec(
        function(error,result){}
    )

更多。您可以在填充中使用 'select'、'where' 和 'limit'(适用于 Mongo)

Model
    .findOne({name:''})
    .populate('project',{
        {where: {field1: true}},
        {select: ['field1','field2']},
        limit: 3
    })
    .exec(
        function(error,result){}
    )

当然你可以填充几个关联

Model
    .findOne({name:''})
    .populate('project')
    .populate('owner')
    .populate('othermodel')
    .exec(
        function(error,result){}
    )