Hi
I believe your question was answered in https://stackoverflow.com/questions/47874605/find-by-sub-document-id-and-update-its-data, where the posted answer is correct:
arrayFilters part of your query is incorrect, it should be elem.id instead of elem._id: {arrayFilters: [ {'elem.id': {$in: [1,2]}}]}arrayFilters is a new MongoDB 3.6 feature, so the query won’t work with versions lower than 3.6. See db.collection.update() for more details.The query as posted works in MongoDB 3.6, once the elem.id term is fixed:
> db.test.find()
{
"_id": 1,
"grades": [
{
"id": 1,
"grade": 80,
"mean": 75,
"std": 6
},
{
"id": 2,
"grade": 85,
"mean": 90,
"std": 4
},
{
"id": 3,
"grade": 85,
"mean": 85,
"std": 6
}
]
}
> db.test.update({_id:1}, {$set:{'grades.$[elem].mean': 100}}, {arrayFilters: [ {'elem.id': {$in: [1,2]}} ]})
WriteResult({
"nMatched": 1,
"nUpserted": 0,
"nModified": 1
})
> db.test.find()
{
"_id": 1,
"grades": [
{
"id": 1,
"grade": 80,
"mean": 100,
"std": 6
},
{
"id": 2,
"grade": 85,
"mean": 100,
"std": 4
},
{
"id": 3,
"grade": 85,
"mean": 85,
"std": 6
}
]
}
Best regards
Kevin