2016-09-07 2 views
2

У меня есть модель, как это:Как запросить только определенное поле модели?

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?

Причина этого вопроса заключается в том, что если у меня есть тысячи статей со встроенными изображениями и т. Д., Было бы напрасно собирать все эти статьи и удалять их в функции toJSON, чтобы показать «электронную почту» 'только поле.

Итак, должен быть лучший способ достичь этого. Я надеюсь, что вы, ребята, можете мне ответить на этот вопрос :)

UPDATE Я забыл сказать, что я использую blueprint.js как можно больше, чтобы избежать переопределения создания, удаления, обновления, ... в контроллерах.

ответ

6

Это не очень хорошо документировано, но ватерлиния обеспечивает 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); 
}); 
+0

Мне нравится этот ответ в случае пользовательских действий. – AndaluZ

0

Можно отключить автоматическое заполнение сопутствующих коллекций в моделях и скрыть небольшие поля в функции toJSON().

Вы можете превратить население с установки Заполнить: ложные в /config/blueprints.js

Чем мы можем запросить пользователей без статей, как в обычном режиме: GET http://localhost:1337/user GET http://localhost:1337/user/id

и если вы хотите показать коллекцию определенного пользователя: GET http://localhost:1337/user/id/articles

другой способ: GET http://localhost:1337/user?populate=[articles] Здесь будут показаны все атрибуты User, включая статьи.

Если у вас есть коллекции: GET http://localhost:1337/user?populate=[articles, xCollection, yCollection]

GET http://localhost:1337/user?populate=[] GET 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

Смежные вопросы