好的,我需要离开做以下事情
我将 mongo 收集为
array (
'_id' => new MongoId("50513d8338fc5de706000000"),
'offers' =>
array (
'0' =>
array (
'minspend' => '50.00',
'cashback' => '1.50',
'percentage' => '0.03',
),
'1' =>
array (
'minspend' => '100.00',
'cashback' => '3.00',
'percentage' => '0.03',
),
),
'percentageTotal' => '0.06',
'test' => new MongoInt32(1),
)
但是假设我只想更新这部分
array (
'0' =>
array (
'minspend' => '50.00',
'cashback' => '1.50',
'percentage' => '0.03',
),
在不重新创建该数组中的整个数据集合的情况下更改子数组的那部分的最佳方法是什么。
有没有可能做这样的事情
array (
'0' =>
array (
'Offer_id'=> new MongoId(5715671561715),
'minspend' => '50.00',
'cashback' => '1.50',
'percentage' => '0.03',
),
)
最佳答案
您可以使用 $set
与点符号一起指定要更新数组的哪个元素:
$collection->update(
array("_id" => new MongoId("50513d8338fc5de706000000")),
array("$set" => array("offers.0" =>
array (
'minspend' => '50.00',
'cashback' => '1.50',
'percentage' => '0.03',
)
))
);
offers.0
指的是数组中的第 0 个(= 第一个)元素。如果你想更新第二个,你可以使用 offers.1
作为关键。
对于你的第二个问题,我假设你想将 MongoId 添加到子文档中。你可以用同样的方式做到这一点,只需添加 'Offer_id' => new MongoId(),
在最低消费之前。这将创建一个新的唯一 MongoId 并将其添加到子文档中。如果您想添加现有的 MongoId,请使用 new MongoId("...")
并替换 ...
24个十六进制字符长字符串。
如果您已经有一个 Offer_id 并且只想更改与该 ID 匹配的报价,您可以使用位置 $ 语法:
$collection->update(
array("_id" => new MongoId("50513d8338fc5de706000000"),
"offers.Offer_id" => new MongoId("5059637720dfeda164ec0fe7")),
array("$set" => array("offers.$" =>
array (
'minspend' => '50.00',
'cashback' => '1.50',
'percentage' => '0.03',
)
))
);
您使用正确的 _id
查询文档另外对于 offers.Offer_id
.在命令的更新部分,您使用 offers.$
其中 $ 将自动匹配包含 Offer_id 的正确子文档。
关于php - mongodb更新或插入子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12468697/