如何更新猫鼬中的特定字段?

Posted

技术标签:

【中文标题】如何更新猫鼬中的特定字段?【英文标题】:How do update a specific field in mongoose? 【发布时间】:2016-02-17 23:03:39 【问题描述】:

我有一个数据集

var JobSchema = Schema(
  candidates: [
    user:  type: Schema.Types.ObjectId, ref: 'User',
    status:  type: String, default: 'In Progress' ,
  ]
);

我想查找特定的job's _id 并更新特定候选人的字段,例如 _id: 123, user: 12345, status: "In Progress"

这个操作的url是--->localhost:3000/apply/:job_id/user_id

例如

假设这是作业mongodb中当前保存的数据

   
   "_id" : 123, ---> job_id

   "candidates" : 
     [ 
        "_id" : 234 , 
        "user": 345 , --> user_id
        "status" : "In Progress" 
     , 

        
        "_id" : 345 , 
        "user": 678 , --> user_id
        "status" : "In Progress" 
      ]
    "__v" : 0 
  

我如何只更新一个特定的字段,比如说 status 属于某个候选人的字段 _id 在 mongodb,这是我的尝试

          Job.update(
                    
                        _id: req.params.job_id,
                    ,
                    
                        $set: 'candidates.$.status': 'Accepted' ,
                    , function(err, count) 
                        if (err) return next(err);
                        callback(err, count);
                    );

如果我使用上面的操作,我会得到这个错误。

MongoError:位置运算符未从查询中找到所需的匹配项。未扩展更新:candidate.$.status

【问题讨论】:

【参考方案1】:

$ 是解决方案:

Job.update(
     
        _id: found._id, 
        'candidates.user': req.params.user_id
    ,
    
        $set:  'candidates.$.status': 'Accepted' ,
    , function(err, count) 
           if (err) return next(err);
           callback(err, count);
);

【讨论】:

以上是关于如何更新猫鼬中的特定字段?的主要内容,如果未能解决你的问题,请参考以下文章

仅填充猫鼬中的特定字段

如何获取 Model.countDocuments() 函数返回的文档计数并将其设置为猫鼬中的其他字段

如何更新猫鼬中的多个文档?

如何更新猫鼬中的多个文档?

如何在猫鼬中保存子文档的数组?

如何填充数组内的对象和猫鼬中的另一个数组中的所有用户字段