在Node.js/Waterline中指定返回的字段?

Rob*_*Rob 8 node.js express sails.js waterline

我想提出一个请求:

User.find().exec(function(){});
Run Code Online (Sandbox Code Playgroud)

我知道我可以toJSON在模型中使用但是我不喜欢这种方法,因为有时我需要不同的参数.例如,如果是登录用户,我将返回他们的电子邮件和其他参数.然而,如果请求相同的数据由不同的用户做出,则它将不包括电子邮件和较小的参数子集.

我也尝试过使用:

User.find({}, {username:1}) ...
User.find({}, {fields: {username:1}});
Run Code Online (Sandbox Code Playgroud)

但没有运气.如何指定我需要返回的字段?

Rob*_*Rob 12

所以实际上找到了一个奇怪的解决方法.的fields,只要你通过其他PARAMS它如参数会顺利limitorder:

User.find({}, {fields: {username:1}}).limit(1);
Run Code Online (Sandbox Code Playgroud)

请注意,这不适用于findOne或任何单一返回类型.这意味着在结果回调中你需要做用户[1].

当然,另一种选择是在出路时擦除您的数据,如果您使用大量项目,这将是一个痛苦.因此,如果任何内容适用于您可能实际设置的大型列表,limit(20)对于单个项目,您可以直接返回para,直到select()可用.


jem*_*oii 11

这是对问题的更新,字段不再用于风帆11,请使用select而不是字段.

Model.find({field: 'value'}, {select: ['id', 'name']})
  .paginate({page: 1}, {limit: 10})
  .exec(function(err, results) {
    if(err) {
      res.badRequest('reason');
    }
    res.json(results);
});
Run Code Online (Sandbox Code Playgroud)


sgr*_*454 5

Waterline目前不支持任何"选择"语法; 它总是返回模型的所有字段.它目前正处于开发阶段,可能会进入下一个版本,但是现在最好的方法就是使用模型类方法来制作自定义查找程序.例如,User.findUser(criteria, cb)可以找到用户给出criteria,然后在决定在回调中返回哪些数据之前检查它是否是登录用户.