【发布时间】:2023-03-18 00:59:01
【问题描述】:
我已经解决了很多关于 SO 的问题,但没有运气。
我正在尝试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
如果我错了,请原谅我,但我被困在这里。它适用于简单的文档,但我无法 更新内部文档中的字段。
请帮忙。
编辑:
架构:
> 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字段的rating字段。我很抱歉问,但请您提供我的前代码。我已经浏览了文档:/
标签: php mongodb sql-update mongodb-php