Невозможно добавить объект как поле Sub для другого существующего объекта JSON - PullRequest
1 голос
/ 05 мая 2020

Я не могу добавить следующий объект:

[
    { 'option1':'opt1','option2':'opt2','option3':'opt3'},
]

в качестве вспомогательного поля в:

const question_list=await Questions.find({ $and: [{categoryid:categoryId},{ isDeleted: false }, { status: 0 }] }, { name: 1 });

question_list=[{"_id":"5eb167fb222a6e11fc6fe579","name":"q1"},{"_id":"5eb1680abb913f2810774c2a","name":"q2"},{"_id":"5eb16b5686068831f07c65c3","name":"q5"}]

Я хочу, чтобы конечный объект был таким:

[{"_id":"5eb167fb222a6e11fc6fe579","name":"q1","options":[
    { 'option1':'opt1','option2':'opt2','option3':'opt3'},
]},{"_id":"5eb1680abb913f2810774c2a","name":"q2","options":[
    { 'option1':'opt1','option2':'opt2','option3':'opt3'},
]},{"_id":"5eb16b5686068831f07c65c3","name":"q5","options":[
    { 'option1':'opt1','option2':'opt2','option3':'opt3'},
]}]

какое наилучшее возможное решение?

1 Ответ

0 голосов
/ 05 мая 2020

Для этого вам нужно использовать aggregation-pipeline вместо .find(). Поскольку проекция в .find() может принимать только $elemMatch, $slice, and $ в существующих полях: project-fields-from-query-results . Итак, чтобы добавить новое поле с новыми данными в документы, используйте $project в структуре агрегирования.

const question_list = await Questions.aggregate([
  {
    $match: {
      $and: [{ categoryid: categoryId }, { isDeleted: false }, { status: 0 }]
    }
  },
  {
    $project: {
      _id: 0,
      name: 1,
      options: [{ option1: "opt1", option2: "opt2", option3: "opt3" }]
    }
  }
]);

Тест: mongoplayground

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...