如何在mongoose中更新特定字段?

13

我有一个数据集,它是:

var JobSchema = Schema({
  candidates: [{
    user: { type: Schema.Types.ObjectId, ref: 'User'},
    status: { type: String, default: 'In Progress' },
  }]
});
我想找到特定的工作_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 
  }

我如何在mongodb中仅更新特定候选人的_id所属的某个字段,例如status字段?以下是我的尝试:

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

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

如果我使用上述操作,就会出现这个错误。

MongoError:位置操作符未能从查询中找到所需的匹配项。未展开的更新:candidates.$.status

1个回答

22

$是解决方案:

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);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接