追加到 MongoDB 中的数组 (PHP 7.2)
Appending To an array in 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
我不确定是什么问题。有人可以帮我解决这个问题吗?
MongoDB的$push运算符用于将指定值附加到数组.
根据文档,$push operators 语法是:
{ $push: { <field1>: <value1>, ... } }
因此,错误消息非常清楚:您正试图 $push 某些内容到子文档 episodes,而您实际上想要将数据添加到数组 My First Title.
试试这个:
$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]
);
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
我不确定是什么问题。有人可以帮我解决这个问题吗?
MongoDB的$push运算符用于将指定值附加到数组.
根据文档,$push operators 语法是:
{ $push: { <field1>: <value1>, ... } }
因此,错误消息非常清楚:您正试图 $push 某些内容到子文档 episodes,而您实际上想要将数据添加到数组 My First Title.
试试这个:
$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]
);