模糊的位置更新操作

时间:2018-05-27 15:03:05

标签: mongodb

我在MongoDB中有这个集合(版本v3.6.3):

{
  _id: '1'
  elements:[
    {
      _id: '11'
      status : DRAFT   
    },
    {
      _id: '12'
      status : DRAFT   
    }
  ]
}

我想更新作业11中的元素1 仅限状态为DRAFT。我已尝试过此查询:

db.getCollection('jobs').update(
  {'_id':'1', 'elements._id': '11', 'elements.status': 'DRAFT'},
  {'$set': { 'elements.$.status' : 'APPROVED' } }
)

结果我有:

ambiguous positional update operation

问题是什么?

解决方案(感谢@ neil-lun)

db.getCollection('jobs').update({
  '_id':'1', 
  'elements': {
    '$elemMatch': {
      '_id': '11', 
      'elements.status': 'DRAFT'
    }
  }
},
{'$set': { 'elements.$.status' : 'APPROVED' } })

令我困惑的是:

db.getCollection('jobs').find({
  '_id':'1', 'elements._id': '11', 'elements.status': 'DRAFT'})

是一个有效的查询,工作正常

0 个答案:

没有答案