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

Posted

技术标签:

【中文标题】更新对象数组中的元素在 Mongoose 中不起作用【英文标题】:update an element inside an array of object is not working in Mongoose 【发布时间】:2018-06-20 22:19:03 【问题描述】:

我有 mongoose 查询来更新一个文档,我必须在其中检查文档 _id 和对象数组中的另一个 id。我的查询是:

Survey.findOneAndUpdate("_id":req.params.id,"inv_users.cmp_user_id":cmp_user_id,

 $set: "inv_users.$.survey_completed":true
  

我需要找到一个带有_id 的文档,并且只在inv_users 中更新survey_completed

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,
        ,
    ]
);

【问题讨论】:

看起来不错;有什么不好的地方? 这就是我想知道的!它没有更新。我想知道为什么。 是不是偶然this issue? 我不认识男人!我已经在 ROBO 中尝试过。它不工作! 我只是在几乎相同的问题上悬赏。如果您找到解决方案,请分享 【参考方案1】:

有同样的问题,只是一起取出了 $set 并且它起作用了

Survey.findOneAndUpdate("_id":req.params.id,"inv_users.cmp_user_id":cmp_user_id,

"inv_users.$.survey_completed":true
  )

【讨论】:

以上是关于更新对象数组中的元素在 Mongoose 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose:通过 findOneAndUpdate 查询使用嵌套对象数组的总和更新父子数据属性不起作用

比较 Mongoose 对象 ID 时,if 语句在 Jade 中不起作用

使用 Mongoose 更新子数组对象不起作用

SetTimeout 在 Mongoose 模式后中间件中不起作用

有没有办法通过在 Mongoose 中查询来更新文档数组中的对象?

MongoDB(Mongoose)更新数组数组中的元素