更新对象数组内的元素在Mongoose中不起作用

时间:2018-01-11 14:36:53

标签: node.js mongodb mongoose

我有用于更新文档的mongoose查询,我要检查文档_id和对象数组中的另一个id。我的疑问是:

Survey.findOneAndUpdate({"_id":req.params.id,"inv_users.cmp_user_id":cmp_user_id},
{
 $set:{ "inv_users.$.survey_completed":true}
  }

我需要查找包含_id的文档,并在survey_completed内仅更新inv_users

const SurveySchema = mongoose.Schema({
    name : {
        type : String,
        require : true,
    },
    company_id: {
        type : Schema.ObjectId,
        require:true
    },
    category : {
        id : Schema.ObjectId,
        name : {
            type : String,
            require : true,
        }
    },
    theme : {
        type : Schema.ObjectId,
    },
    display_type : {
        ui : {
            type : String
        },
        randomization  : {
            type : Boolean,
            default : false,
        },
        skip  : {
            type : Boolean,
            default : false,
        },
        pageno : {
            type : Boolean,
            default : false,
        }
    },
    start_datetime : { 
        type: Date,
    },
    end_datetime : { 
        type: Date,
    },
    logo : { 
        type : String,
    },
    is_header  : {
        type : Boolean,
        default : false,
    },
    is_footer  : {
        type : Boolean,
        default : false,
    },
    header_title : { 
        type: String,
    },
    footer_title : { 
        type: String,
    },
    questions : [{
        question : {
            type : String,
        },
        ans_type : {
            type : String,
        },
        options : [{
            type : String,
        }],
        answers : [{
            answer : {
                type : String,
            },
            cmp_user_id : {
                type : Schema.ObjectId,
            },
            global_user_id : {
                type : Schema.ObjectId,
            },
            date_time : {
                type : Date,
                default:Date.now()
            },
            ip : {
                type : String,
            },
            latitude : {
                type : Number,
            },
            longitude : {
                type : Number,
            }
        }]
    }],

    inv_users : [{
        cmp_user_id : {
            type : Schema.ObjectId,
        },
        email : {
            type : String,
        },
        mail_viewed  : {
            type : Boolean,
            default : false,
        },
        ip : {
            type : String,
        },
        latitude : {
            type : Number,
        },
        longitude : {
            type : Number,
        },
        img_read_code : {
            type : String,
        },
        mail_responsed  : {
            type : Boolean,
            default : false,
        },
        survey_completed  : {
            type : Boolean,
            default : false,
        },
    }]
});

1 个答案:

答案 0 :(得分:0)

同一问题刚刚将$ set全部取出来并且有效吗

Survey.findOneAndUpdate({"_id":req.params.id,"inv_users.cmp_user_id":cmp_user_id},
{
"inv_users.$.survey_completed":true
  })