首页 > 解决方案 > 追加到 MongoDB 中的数组 (PHP 7.2)

问题描述

push()我知道,操作将附加数据。但是,我遇到了一个奇怪的问题。我有一个非常简单直接的 PHP 脚本。它会得到一些 JSON,基于它,它会在 MongoDB 中查找一个条目,然后更新某个位置。

这是我的 MongoDB JSON:

{
  "_id": "5d246a404ddb5c24231eb3f2",
  "series_id": "GY5VKE9EY",
  "episodes": {
    "3x": {
      "My First Title": [
        {
          "offsetLeft": 157,
          "offsetTop": -1,
          "episode_number": "50"
        }
      ]
    }
  }
}

现在,我想在My First Title键中添加新条目。我有这个我想添加的 JSON。

{
  "offsetLeft": 157,
  "offsetTop": -1,
  "episode_number": "50"
}

我编写的脚本,当我给它那个 JSON 时,它说文档已更新。但是,当我签入数据库时​​,它从未更新过。

这是我的 PHP 代码:

try{

    $encoded_json = json_encode($final_array_to_update);
    $internal_json = array("episodes" => array($key_value => $encoded_json));
    $collection->updateOne(
        array("_id" => $_id),
        array('$push' => $internal_json)
    );
    echo "Updated The Document.";
}
catch (Exception $ex)
{
    echo $ex;
}

此外,由于某些奇怪的原因,现在错误更改为:

BulkWriteException: The field 'episodes' must be an array but is of type object in document

我不确定问题是什么。有人可以帮我解决这个问题。

标签: phpjsonmongodbphp-7.2

解决方案


MongoDB 的$push运算符用于将指定的值附加到数组

根据文档, $push 运算符 sintax 是:

{ $push: { <field1>: <value1>, ... } }

因此,错误消息非常清楚:当您实际上想要将数据添加到数组My First Title时,您正在尝试向子文档episodes添加一些内容。

尝试这个:

$final_array_to_update = [
    'offsetLeft' => 157,
    'offsetTop' => -1,
    'episode_number' => '50'
];   

// index is the path to the array - value is the array to push
$update = [
    'episodes.3x.My First Title' => $final_array_to_update 
];

$collection->update(
    ['_id' => $_id],
    ['$push' => $update]
);

推荐阅读