我有一个这样的模型:
module.exports = {
attributes: {
email: {
type: 'email',
required: true,
unique: true
},
password: {
type: 'string',
minLength: 6,
required: true
},
articles: {
collection: ‘article',
via: 'owners'
},
toJSON: function() {
var obj = this.toObject();
delete obj.password;
return obj;
}
}
}

如何在不删除toJSON函数中的其他字段的情况下仅查询“email”字段?
这个问题的原因是,如果我有数千篇带有嵌入图像的文章等等,收集所有这些文章并将其删除到toJSON函数中只是为了显示“电子邮件”是浪费仅限场地。
所以,必须有更好的方法来实现这一目标。我希望你们能回答我这个问题:)
更新 我忘了说我尽可能使用blueprint.js以避免在控制器中覆盖创建,删除,更新......。
答案 0 :(得分:6)
没有很好的文档记录,但Waterline提供select criteria在此实施https://github.com/balderdashy/waterline-criteria/blob/master/lib/projections/select.js
我测试了以下内容并且有效。 {}
可能是任何查询:
Model.find({}, {select: ['email']}).exec(function(err, result) {
return res.send(result);
});
答案 1 :(得分:0)
可以在模型中关闭自动填充的关联集合,并隐藏toJSON()函数中的小字段。
您可以通过设置关闭人口 填充:false 在/config/blueprints.js
我们可以像往常一样查询没有文章的用户: 获取http://localhost:1337/user 获取http://localhost:1337/user/id
如果你想显示某个用户的集合: 获取http://localhost:1337/user/id/articles
另一种方式是: 获取http://localhost:1337/user?populate=[articles] 这将显示所有用户属性,包括文章。
如果您有更多收藏品: GET http://localhost:1337/user?populate=[articles,xCollection,yCollection]
获取http://localhost:1337/user?populate=[] 获取http://localhost:1337/user?populate=false 两者都关闭了收藏品。
希望这有帮助。
来源: http://sailsjs.org/documentation/reference/blueprint-api/populate-where https://github.com/balderdashy/sails/issues/780 How to selectively populate waterline associations via query param in sails.js