У меня много вопросов на SO, но вам не повезло.Обновление внутреннего документа PHP Mongodb
Я пытаюсь использовать update
одно поле базы данных.
Моя одна запись выглядит так:
{
"_id" : ObjectId("53e82f244019968f9eb32f8e"),
"date" : "12/12/14",
"dishes" : [
{
"dishname" : "sushi",
"quantity" : "4",
"price" : "10",
"total" : 30,
"rating" : "3"
},
{
"dishname" : "pad thai",
"quantity" : "2",
"price" : "10",
"total" : 20,
"rating" : "0"
}
],
"orderid" : "1234",
"rating" : "4",
"sum" : "50"
}
Я хочу, чтобы обновить 'rating'
поле блюд.
Я попытался это до сих пор:
$m = new MongoClient();
$orders = $m->ordertable->ordertable;
$order = $orders->findOne(array('orderid' => '1234'));
$newdata = array('$set' => array("dishes"=> array("rating" => "11")));
Это дает мне ошибку, как:
Notice: Trying to get property of non-object in C:\WWW\bootstrap-3.2.0\docs\examples\carousel\ajax\rating.php on line 36
Fatal error: Call to a member function update() on a non-object in C:\WWW\bootstrap-3.2.0\docs\examples\carousel\ajax\rating.php on line 36
Прости меня, если я ошибаюсь, но я застрял здесь. Он работает для простого документа, но я не могу обновить поле внутри внутреннего документа.
Пожалуйста, помогите.
EDIT:
Схема:
> show dbs;
local 0.078125GB
menu 0.203125GB
ordertable 0.203125GB
project 0.203125GB //The DB I am using
test 0.203125GB
> db.orders.find().pretty();
{
"_id" : ObjectId("53e88de4ab129b4b8094eeba"),
"orderid" : "1234",
"dishes" : [
{
"dishname" : "sushi",
"quantity" : "4",
"price" : "10",
"total" : 30,
"rating" : "3"
},
{
"dishname" : "pad thai",
"quantity" : "2",
"price" : "10",
"total" : 20,
"rating" : "0"
}
],
"sum" : "50",
"date" : "12/12/14"
}
>
Мой окончательный код:
$m = new MongoClient();
$orders = $m->project->orders;
$orders->update(
array(
array('orderid' => '1234'),
array('dishes.dishname' => 'sushi')
),
array(
'$set' => array('dishes.$.rating' => '5')
)
);
Какой элемент посуды? '$ set' - это способ сделать это, но не так, как вы его используете. В документации есть примеры. –
Можете ли вы отправить сообщение в соответствии с моей демо-записью? Я хочу изменить поле 'рейтинг' каждого поля' dish'. Прошу прощения, но можете ли вы предоставить мне код ex. Я уже прошел через документацию:/ –