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

我想提出一个请求:

User.find().exec(function(){}); 

我知道我可以在模型中使用toJSON ,但是我不喜欢这种方法,因为有时我需要不同的参数。 例如,如果它是login用户,我将返回他们的电子邮件和其他参数。 但是,如果对同一数据的请求由不同的用户进行,则不包括电子邮件和更小的参数子集。

我也试过使用:

 User.find({}, {username:1}) ... User.find({}, {fields: {username:1}}); 

但没有任何运气。 我怎样才能指定我需要返回的字段?

所以实际上find了一个奇怪的解决方法。 只要你通过limitorder等其他参数, fields参数将工作:

 User.find({}, {fields: {username:1}}).limit(1); 

请注意,这不适用于findOne或任何单一的返回types。 这意味着在你的结果callback你将需要做用户[1]。

当然,另外一个select就是在出门的时候擦洗你的数据,如果你使用了大量的项目,这是一个痛苦的事情。 所以如果有的话,这可以用于大型列表,你可能实际设置了limit(20) ,对于单个项目,你可以显式返回直到select()可用。

这是对问题的更新,字段不再用于风帆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); }); 

水线目前不支持任何“select”语法; 它总是返回模型的所有字段。 它目前正在开发中 ,可能会进入下一个版本,但现在最好的方法就是使用模型类方法来定制查找器。 例如, User.findUser(criteria, cb)可以find用户给出的criteria ,然后在决定callback中返回哪些数据之前检查它是否是login用户。