2017-07-02 4 views
0

J'ai donc une liste de questions à choix multiples et je veux stocker, chaque fois qu'un utilisateur répond à la même question, sa réponse à cette question. Je veux donc créer un document par utilisateur et son historique de réponses par question. J'ai fait un tableau de questions qui contient le questionId et aussi un tableau de réponses ('ans' avec ses réponses.) J'ai donc écrit un code de base où j'ajoute pour la question 1, sa première réponse 'a' et maintenant je veux mettre à jour document avecMongoDb PHP Insérer la valeur d'insertion dans un tableau de tableau

$m = new MongoClient(); 
$db = $m->test; 
$answers = $db->answers; 

$answers->insert([ 'userId' => 1, 'questions' => [[ 'questionId' => '1', 'ans' => ['a'] ]]]); 
$answers->update(array('userId' => 1, 'questions.questionId' => '1'), 
       array('$push' => array('questions' => array('ans' => 'b')))); 

réponse « b » le problème est qu'au lieu d'ajouter au tableau existant, un nouvel objet est créé:.

_id:5958c3e1e87cbf643400734d 
userId:1 
    questions:Array 
    0:Object 
    questionId:"1" 
    ans:Array 
    0:"a" 
    1:questionId 
    ans:"b" 

Je sais que cela est une question fondamentale, mais J'ai cherché dans d'autres questions mais je ne peux pas obtenir la syntaxe pour fonctionner.Je pense que le problème réside dans le fait que le document correct est trouvé, mais je ne peux pas comprendre comment l'ajouter à l'existant et un rray au lieu de créer un nouveau champ ans. Merci de votre aide.

Répondre

0

Ok, j'ai finalement trouvé la solution. J'avais l'usage le. et $ notation

$ answers-> update (array ('userId' => 1, 'questions.questionId' => '1'), array ('$ push' => array ('questions. $. ans '=>' try2 ')));