如何使用PHP使用子文档MongoId更新部分MongoDb文档

如何使用PHP使用子文档MongoId更新部分MongoDb文档,php,mongodb,Php,Mongodb,我有一份Mongo文件,如下所示。使用PHP我需要更新帐户的密码,我可以通过电子邮件或id访问它 我认为在执行更新时,以下代码将使文档的这一部分成为焦点: $criteria = array("accounts.email" => $emailAddress); $document = array( '$set' => array( "accounts.password" => $newPassword ) ); 但在进行更新时,没有任何内容

我有一份Mongo文件,如下所示。使用PHP我需要更新帐户的密码,我可以通过电子邮件或id访问它

我认为在执行更新时,以下代码将使文档的这一部分成为焦点:

$criteria = array("accounts.email" => $emailAddress);
$document = array(
    '$set' => array(
        "accounts.password" => $newPassword
     )
);
但在进行更新时,没有任何内容得到更新。你知道我如何通过只提供电子邮件地址或id来更新密码吗

{
"accounts": [
    {
      "id": ObjectId("5266cf3c9b7e7a292b000002"),
      "main": true,
      "username": "username_a",
      "password": "password_a",
      "email": "a@a.com"
    },
    {
      "id": ObjectId("5266cf3c9b7e7a292b000004"),
      "main": true,
      "username": "username_a",
      "password": "password_b",
      "email": "b@b.com"
    }
  ],
  "active": true
}
使用


嗨,比约里,我试过你的建议,但是运气不好。文档中的数据保持不变,奇怪的是也没有返回错误。有什么线索吗?我设法从系统中得到了一条错误消息:“如果没有包含数组的相应查询字段,就无法应用位置运算符”。错误很明显是我的,一个打字错误。位置$operator正是我所需要的。
$criteria = array("accounts.email" => $emailAddress);
$document = array(
    '$set' => array(
        'accounts.$.password' => $newPassword
     )
);

$collection->update($criteria, $document);