猫鼬更新数组中对象的单一值

时间:2019-08-05 15:33:28

标签: mongodb mongoose

我目前正在尝试通过使用以下数据,将单个用户的数组(影片列表)中ID为“ 12345”的对象的值(状态)从“计划观看”更新为“观看”

    {
       _id: "5d4813c0a14fcd44f83feda8",
       userName : "Dave",
       movielist : 
       [
        {
          _id:"5d29c4922ce984356cea8b48",
              movie:
           {
              _id:"12345"
              title:"The Avengers",
         movieLength:"143min",
           }
          status:"Plan to watch"
        },
        {
           _id:"5d276dd65f27682c26c6041b",
            movie:
           {
              _id:"5d28ca94e2e19d6cbaecdef9"
              title:"The Avengers",
              movieLength:"143min",
           }
      status:"Completed"
         }
        ]
     }

我尝试使用下面的猫鼬更改值:

userModel.findByIdAndUpdate(5d4813c0a14fcd44f83feda8,{movielist :{id:12345}},{$set:{movielist :{status:"Completed"}}},callback)

但是我得到的是我试图更新的ID为“ 12345”的对象的属性状态已删除,如下所示:

         {
   _id: "5d4813c0a14fcd44f83feda8",
   userName : "Dave",
   movielist : 
   [
    {
      _id:"5d29c4922ce984356cea8b48",
      movie:
      {
         _id:"12345"
         title:"The Avengers",
         movieLength:"143min",
      }
    },
    {
      _id:"5d276dd65f27682c26c6041b",
      movie:
      {
         _id:"5d28ca94e2e19d6cbaecdef9"
         title:"The Avengers",
         movieLength:"143min",
      }
      status:"Completed"
    }
   ]
}

我尝试使用下面的猫鼬更改值: 以下是我用于此对象的架构:

userSchema = schema({
                userName: String,
                movielist : [{id :{type: mongoose.Schema.Types.ObjectId,
                    ref: 'movies', required : true}, status : String}],
            });

我可以知道我犯了什么可怕的错误吗?

3 个答案:

答案 0 :(得分:1)

请更新您的查询:

userModel.findOneAndUpdate({_id: ObjectId('5d4813c0a14fcd44f83feda8'), 'movielist.movie._id': '12345'}, {$set:{'movielist.$.status' :'Completed'}}, {returnNewDocument : true},callback)

答案 1 :(得分:1)

您能写出统计信息吗?

         userSchema = schema({
            userName: String,
            movielist : [{id :{type: mongoose.Schema.Types.ObjectId,
                ref: 'movies', required : true}, status: String}],
        });

答案 2 :(得分:0)

因此,在进行了一些研究以及查看了一些其他stackoverflow问题之后,我修改了你们给我的答案,并通过FindOneAndUpdate之后的筛选器部分中的猫鼬运算符$ elemMatch将状态更改为“已完成”。 UserId,只想感谢所有指导我的人,对我的错别字感到非常抱歉,对此我感到很遗憾