什么是SailsJs?

时间:2014-12-09 12:20:40

标签: node.js sails.js waterline

我最近开始研究sailsJs并且不了解细微之处 请向我解释一下SailsJs中的填充内容,以及谁可以做一个简单的例子 提前致谢 ? 什么是?

User.find({ name: 'foo' })
.populate('pets', { name: 'fluffy' })
.exec(function(err, users) {
  if(err) return res.serverError(err);
  res.json(users);
});

4 个答案:

答案 0 :(得分:4)

populate用于关联。当你的模型是这样的:

// User.js
module.exports = {
  attributes: {

    name: {
      type: "string"
    },

    pet: {
      model: "pet"
    }

  }
}

这里用户集合的pet属性是对宠物表的引用。在用户表中,它将仅存储pet的id列。但是,当您在查找时执行填充时,它将获取宠物条目的整个记录​​并在此处显示。这只适用于一对一的关联。您可以拥有多对一的关联以及多对多关联。有关详细信息,请参阅此documentation

答案 1 :(得分:0)

sailsjs项目使用wateline ORM。你可以看到文件。如果要使用'populate()',则需要在模型中定义关联。

.populate()

populate与关联一起使用,以包括模型定义中指定的任何相关值。如果集合属性是在多对多,一对多或多对多关联中定义的,则populate选项也接受完整的条件对象。这允许您过滤关联并运行限制并跳过结果。

例如,你需要这样做:

user.js的

// A user may have many pets
var User = Waterline.Collection.extend({

  identity: 'user',
  connection: 'local-postgresql',

  attributes: {
    firstName: 'string',
    lastName: 'string',

    // Add a reference to Pets
    pets: {
      collection: 'pet',
      via: 'owner'
    }
  }
});

Pet.js

// A pet may only belong to a single user
var Pet = Waterline.Collection.extend({

  identity: 'pet',
  connection: 'local-postgresql',

  attributes: {
    breed: 'string',
    type: 'string',
    name: 'string',

    // Add a reference to User
    owner: {
      model: 'user'
    }
  }
});

您可以准备好文档,并且可以非常轻松地使用它

答案 2 :(得分:0)

要恢复 .populate()(由水线使用),SQL会使用 join

.populate()允许您加入数据库中的表。 链接标识符将在您的模型中定义。

换句话说,要将用户(位于&#34; User&#34;表中)与狗(位于&#34; Dog&#34;表中)相关联,请使用填充。< / p>

恢复你的榜样:

您正在寻找user =&gt; User.find({name:my_user})
你正在寻找名为&#34;蓬松&#34; =&GT; {name:&#39;蓬松&#39;}
你正在寻找那种“蓬松”的狗。与您的用户相关联(所属)=&gt; 填充(&#39;宠物&#39;)

哪个给:

User.find({ name: 'foo' })
.populate('pets', { name: 'fluffy' })
.exec(function(err, users) {
 if(err) return res.serverError(err);
 res.json(users);
}

此关联(&#34; pets&#34;),您可以在模型中定义它&#34;用户&#34;和#34;宠物&#34;就像上面的例子一样。

答案 3 :(得分:-5)

Populate是关于显示其被重新提交的(id)内容的全部内容

"abc": [{
    type: ObjectId,
    ref: "xyz"
}],