在Node.js / Waterline中指定返回的字段?
我想提出一个请求:
User.find().exec(function(){});
我知道我可以在模型中使用toJSON
,但是我不喜欢这种方法,因为有时我需要不同的参数。 例如,如果它是login用户,我将返回他们的电子邮件和其他参数。 但是,如果对同一数据的请求由不同的用户进行,则不包括电子邮件和更小的参数子集。
我也试过使用:
User.find({}, {username:1}) ... User.find({}, {fields: {username:1}});
但没有任何运气。 我怎样才能指定我需要返回的字段?
所以实际上find了一个奇怪的解决方法。 只要你通过limit
或order
等其他参数, 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用户。