MongoDB: сопоставить один объект с новым столбцом и получить объединенные новые данные - PullRequest
0 голосов
/ 04 января 2019

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

Отдельный вопрос будет отображаться пользователю в виде формы без ответа, и вскоре пользователь выберет опцию и отправит форму, которую он отправит в другой набор данных с именем «Ответы». каждый объект ответа будет содержать "Participated_user_id", "Quiz_id", "answers". Ответ будет содержать каждый «question_id» и «user_answer».

Теперь я хочу запрос, который объединит эти два набора данных и в наборе «викторина» добавит «user_answer» после каждого вопроса.

ВИКТОРИНА

{
_id : 856803,
title : My quiz title,
active : on,
questions : [
  {
    _id : 135224,
    options : [a, b c, d],
    question : here is my question one ?,
    answer : a,
  },
  {
    _id : 135229,
    options : [a, b c, d],
    question : here is my question two ?,
    answer : a,
  }
 ]
}

ОТВЕТЫ

{
  _id : 1234,
  quiz_id : 856803,
  answers : [
     {
        _id: 2367,
        question_id : 135224,
        answer : a
     } ,
     {
        _id: 2364,
        question_id : 135229,
        answer : c
     } 
  ]
}

Хочу

{
_id : 856803,
title : My quiz title,
active : on,
questions : [
  {
    _id : 135224,
    options : [a, b c, d],
    question : here is my question one ?,
    answer : a,
    user_answer : a
  },
  {
    _id : 135229,
    options : [a, b c, d],
    question : here is my question two ?,
    answer : a,
    user_answer : c
  }
 ]
}

1 Ответ

0 голосов
/ 05 января 2019
db.getCollection('quiz').findOne({}, function(err, doc){

     db.getCollection('answers').findOne({quiz_id : doc._id}, function(err, ans){

        doc.questions.forEach( function( item) {

             for( let i = 0; i < ans.answers.length; i++ ) {
                  if( ans.answers[i].question_id === item._id )
                      item.user_answer = ans.answers[i].answer;            

              }

         })

     })
  let _id = doc._id
  delete doc._id // for handling duplicate key error in update
  db.getCollection( 'quiz' ).update({_id: _id}, doc, function(err, result){

                 console.log( "doc updated as per your requirements")
   })

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