NodeJS+MongoDB:如何删除文档中的指定子字段
当然可以实现!你的问题出在
$unset的语法上 你当前的写法会让MongoDB误以为要删除整个tracking字段,因为你把tracking作为键,值是一个嵌套对象——这不是MongoDB定位嵌套子字段的正确方式。
要仅删除tracking下的bettercallsaul子字段,你需要使用**点符号(dot notation)**来精准定位嵌套字段,这是MongoDB操作嵌套文档的标准做法。
正确的更新语句
collection.updateOne( { "username": req.session.username }, { $unset: { "tracking.bettercallsaul": 1 } } // 值可以是任意(比如""、null、1),MongoDB会忽略它 );
为什么原来的写法不行?
当你写{ $unset : { "tracking" : { showname : 1 } } }时,MongoDB会将tracking字段整体标记为要删除的目标,而不是识别里面的子字段。只有通过点符号tracking.bettercallsaul,MongoDB才会明确你要删除的是tracking文档下的特定子字段。
执行完正确的语句后,你的文档会变成这样(如果tracking没有其他子字段的话):
{ "username":"j", "pass":"t", "tracking": {} }
如果tracking原本还有其他子字段,它们会被完整保留,只有bettercallsaul会被移除。
内容的提问来源于stack exchange,提问作者ichikasuto
相关产品推荐
相关产品推荐

