节点JS如何更新内部的内部元素

我正在与mongo和nodejs,我试图添加一个question对象的response对象

以下是我正在使用的模型的一部分:

 questions: [ { name: String, responses: [ { username: String, reply: String } ] } ] 

我试图“响应”这样的responses

 for(var i = 0; i < req.body.response.length && i < survey.questions.length; i++) { var response = req.body.response[i]; if(response.trim() == "") continue; // survey.questions[i].responses.push({ var responseIndex = "questions[" + i + "].responses"; Survey.findByIdAndUpdate(survey._id, { "$addToSet" : { responseIndex : { username: (req.user ? req.user.username : null), reply: response } } }, function(error, survey) { if(error) { console.log(error); } console.log(survey); }); } 

但是,问题在于它创build了一个没有数据的新问题对象。 任何有识之士将不胜感激!

编辑:这是整个调查模型

 /// <reference path="../../typings/tsd.d.ts" /> var mongoose = require("mongoose"); var schema = new mongoose.Schema({ surveyName: String, creator: String, created: { type: Date, default: Date.now }, questions: [ { name: String, responses: [ { username: String, reply: String } ] } ] }); module.exports = mongoose.model('Survey', schema); // exports.Survey = mongoose.model('Survey', schema); 

当你需要在数组中添加一个对象时,你应该使用$ push函数,因为你的question模型中有一个子文档 。 在你的情况下,内在的,可能你可以做到这一点:

 Survey.findById(survey._id, function(error, res) { for(var i = 0; i < req.body.response.length && i < survey.questions.length; i++) { var response = req.body.response[i]; if(response.trim() == "") continue; (res.questions[i]).responses.push(response); } res.save(function(error, res) { // survey updated with responses. } } 

让我知道这个是否奏效。