MongoDB PHP向phone数组添加多个对象时的语法错误解决
解决MongoDB中使用$addToSet批量添加多个对象到数组的语法错误问题
我来帮你搞定这个问题!你遇到的语法错误根源有两个:一是PHP数组的写法不符合语法规范,二是批量添加多个元素到MongoDB数组字段时,没正确结合$each和$addToSet操作符来实现。
错误原因分析
你写的这段代码存在PHP语法错误:
array(("id" => "6","name" => "Bob","no" => "+1 000 0000"),("id" => "7","name" => "Bob","no" => "+1 000 0000"))
PHP中创建包含多个关联数组的数组,不需要额外嵌套括号,直接将每个关联数组放在外层数组中即可。另外,MongoDB的$addToSet要实现批量添加多个元素,必须配合$each操作符,把待添加的元素列表传递给$each,否则无法识别批量添加的逻辑。
正确代码示例
以下是修正后的正确写法:
$col->update( array("email" => $email), array( '$addToSet' => array( "phone" => array( '$each' => array( array("id" => "6", "name" => "Bob", "no" => "+1 000 0000"), array("id" => "7", "name" => "Bob", "no" => "+1 000 0000") ) ) ) ) );
代码说明
array("email" => $email):查询条件,定位到目标邮箱对应的文档$addToSet:确保仅添加phone数组中不存在的元素(自动去重,避免重复数据)$each:告诉MongoDB要批量添加后续数组中的多个对象到phone字段- 内层的两个
array(...):就是你需要新增的两个电话对象,这是PHP中创建多元素数组的正确格式
执行该命令后,目标文档的phone数组会新增这两个对象(若之前不存在),最终结构如下:
"_id": "id", "email": "Name@google.com", "phone": [ { "id": "1", "name": "Bob", "no": "+1 000 0000" }, { "id": "2", "name": "Bob", "no": "+1 000 0000" }, { "id": "6", "name": "Bob", "no": "+1 000 0000" }, { "id": "7", "name": "Bob", "no": "+1 000 0000" } ]
内容的提问来源于stack exchange,提问作者Vitalii
相关产品推荐
相关产品推荐

