MongoDB PHP:删除文档中phone数组内所有元素但保留数组
解决MongoDB清空phone字段内容但保留字段本身的问题
嘿,我发现你这里有两个需要调整的地方,咱们一步步来解决:
首先,先纠正一个小误解:你示例里的phone其实是MongoDB文档对象(键值对结构),不是数组哦。另外你当前的代码里有两个问题:一是用了$unset操作符(这个会直接删除整个字段,所以才会把phone也删掉),二是字段名写错成了dictionary,应该是phone。
要实现清空phone内的所有元素但保留字段本身,你需要用$set操作符,把phone的值替换成空对象(如果是数组的话就替换成空数组)。
修正后的PHP代码(适配旧版驱动)
$email = "Name@google.com"; $col->update( array("email" => $email), array('$set' => array("phone" => array())) // 空数组在MongoDB中会被识别为空文档对象,或者用 (object)[] 更明确 );
推荐的现代PHP驱动写法(MongoDB扩展)
如果你用的是官方新的MongoDB PHP扩展,更推荐用updateOne方法,并且明确指定空文档:
$email = "Name@google.com"; $col->updateOne( ["email" => $email], ['$set' => ["phone" => new MongoDB\BSON\Document()]] );
原理说明
$set操作符的作用是替换字段的值,这里把phone设为空对象/空数组,既保留了phone字段,又清空了里面所有的元素。- 而你之前用的
$unset是完全移除指定字段,所以不符合你的需求。
如果你的phone确实是数组类型(可能示例写错了),只需要把$set的值改成[](空数组)就可以了。
内容的提问来源于stack exchange,提问作者Vitalii
相关产品推荐
相关产品推荐

