我想通过文档的子数组中的id更新特定元素。
我使用arrayFilters。如果我使用{"members1.id":"311129357362135041"}
在arrayFilter中直接指定ID,则会按预期对其进行修改:
> db.guilds.updateOne({id:"561235799233003551"}, {$set: {"members.$[members1]": {test:"hi"}}}, {upsert: true, arrayFilters: [{"members1.id":"311129357362135041"}]})
> { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
但是如果我尝试将元素与{"members1":{$elemMatch: {id:"311129357362135041"}}}
匹配,则不会更新/查找元素:
> db.guilds.updateOne({id:"561235799233003551"}, {$set: {"members.$[members1]": {id:"311129357362135041"}}}, {upsert: true, arrayFilters: [{"members1":{$elemMatch: {id:"311129357362135041"}}}]})
> { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 0 }
那是为什么?还是有更好的解决方案?