@Skrolea

Как составить запрос в Mongo?

Почему то не вижу своего предыдущего вопроса, хотел добавить туда.
Но
Имею такую структуру схемы
var ArticleSchema = new Schema({
      created: {
         type: Date,
         default: Date.now
                },
       title: {
          ru : {
             type: String,
             default: '',
             trim: true,
             required: 'Заголовок должен быть заполнен'
               },
          en : {
             type: String,
             default: '',
             trim: true,
             required: 'Title cannot be blank'
                }
          },
        content: {
          ru : {
             type: String,
             default: '',
             trim: true,
             required: 'Текст должен быть заполнен'
              },
          en : {
            type: String,
            default: '',
            trim: true,
            required: 'Title cannot be blank'
               }
             },
          user: {
            type: Schema.ObjectId,
            ref: 'User'
                }
 });

И хочу получатьtitle иcontent в зависимости от существующей локали. Её я получаю с помощью метода getLocale() от i18n. Как можно сделать запрос в контроллере
exports.list = function (req, res) {
   var locale = i18n.getLocale()// выдаёт правильно - en или ru
   var query = // Вот что сюда воткнуть???
     Article.find(query).sort('-   created').populate('user', 'displayName').exec(function (err, articles) {

    if (err) {
    return res.status(400).send({
      message: errorHandler.getErrorMessage(err)
      });

  } else {
     res.json(articles);
  }
 });
};


чтобы получать title и content только на нужном языке?
  • Вопрос задан
  • 552 просмотра
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347 Куратор тега JavaScript
Crazy on performance...
У find 1й параметр отвечает за условия, возвращаемые поля определяет 2й параметр, но при его наличии будут отсутствовать все остальные поля документа, можно конечно их перечислить, но это придется менять при изменении структуры документа, пример:
var locale = i18n.getLocale();
 Article.find({}, {
    ['title.' + locale]: 1,
    ['content.' + locale]: 1
})

Второй вариант - это преобразовать результат от базы так как Вам надо, пример:
var locale = i18n.getLocale();
Article.find().sort('-   created').populate('user', 'displayName').exec(function (err, articles) {
  if (err) {
    return res.status(400).send({
      message: errorHandler.getErrorMessage(err)
    });
  } else {
     articles.forEach(article => {
       article.title = article.title[locale];
       article.content = article.content[locale];
     });
     res.json(articles);
  }
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
24 нояб. 2024, в 03:11
500 руб./за проект
24 нояб. 2024, в 01:35
5000 руб./за проект
24 нояб. 2024, в 01:24
500 руб./за проект