如何只查询模型的某个字段?

时间:2016-09-07 08:43:00

标签: node.js sails.js waterline

我有一个这样的模型:



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以避免在控制器中覆盖创建,删除,更新......。

2 个答案:

答案 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