我在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'})
是一个有效的查询,工作正常